PHP 和 HTML 紧密交互:PHP 可以生成 HTML,HTML 可以将信息传递给 PHP。在阅读这些常见问题解答之前,您需要了解如何从外部来源检索变量。本主题的手册页面也包含许多示例。
编码很重要的阶段有几个。假设您有一个字符串$data,其中包含您想要以未编码方式传递的字符串,这些是相关的阶段
HTML 解释。为了指定一个随机字符串,您必须将其包含在双引号中,并使用htmlspecialchars()对整个值进行转义。
URL:URL 由几个部分组成。如果希望您的数据被解释为一个项目,则必须使用urlencode()对其进行编码。
示例 #1 隐藏的 HTML 表单元素
<?php
echo '<input type="hidden" value="' . htmlspecialchars($data) . '" />'."\n";
?>
注意:对$data使用urlencode()是错误的,因为浏览器负责urlencode()数据。所有流行的浏览器都能正确地做到这一点。请注意,无论方法(即 GET 或 POST)如何,这都会发生。不过,您只会注意到 GET 请求的情况,因为 POST 请求通常是隐藏的。
示例 #2 用户可编辑的数据
<?php
echo "<textarea name='mydata'>\n";
echo htmlspecialchars($data)."\n";
echo "</textarea>";
?>
注意:数据按预期显示在浏览器中,因为浏览器将解释 HTML 转义的符号。 提交后,无论是通过 GET 还是 POST,浏览器都将对数据进行 url 编码以进行传输,并且 PHP 将直接对其进行 url 解码。因此,最终您无需自己进行任何 url 编码/url 解码,所有操作都由系统自动处理。
示例 #3 在 URL 中
<?php
echo '<a href="' . htmlspecialchars("/nextpage.php?stage=23&data=" .
urlencode($data)) . '">'."\n";
?>
注意:实际上,您是在伪造一个 HTML GET 请求,因此需要手动urlencode()数据。
注意:您需要htmlspecialchars()整个 URL,因为 URL 作为 HTML 属性的值出现。在这种情况下,浏览器将首先取消htmlspecialchars()值,然后传递 URL。PHP 将正确理解 URL,因为您已经urlencode()了数据。 您会注意到 URL 中的
&
被替换为&
。虽然大多数浏览器都会在您忘记此操作时恢复,但这并非总是可能的。因此,即使您的 URL 不是动态的,您也需要htmlspecialchars() URL。
提交表单时,可以使用图像而不是标准提交按钮,使用类似以下的标签:
<input type="image" src="image.gif" name="foo" />
因为foo.x和foo.y在 PHP 中将构成无效的变量名,所以它们会自动转换为foo_x和foo_y。也就是说,句点将替换为下划线。因此,您可以像在有关从外部来源检索变量部分中描述的任何其他变量一样访问这些变量。例如,$_GET['foo_x']。
注意:
请求变量名中的空格将转换为下划线。
要将<form>结果作为数组发送到您的 PHP 脚本,请像这样命名<input>、<select>或<textarea>元素
<input name="MyArray[]" /> <input name="MyArray[]" /> <input name="MyArray[]" /> <input name="MyArray[]" />
<input name="MyArray[]" /> <input name="MyArray[]" /> <input name="MyOtherArray[]" /> <input name="MyOtherArray[]" />
<input name="AnotherArray[]" /> <input name="AnotherArray[]" /> <input name="AnotherArray[email]" /> <input name="AnotherArray[phone]" />
注意:
在 HTML 中指定数组键是可选的。如果您未指定键,则数组将按照元素在表单中出现的顺序填充。我们的第一个示例将包含键 0、1、2 和 3。
HTML 结构中的 select multiple 标签允许用户从列表中选择多个项目。然后将这些项目传递到表单的动作处理程序。问题是它们都使用相同的窗口小部件名称传递。即
<select name="var" multiple="yes">
var=option1 var=option2 var=option3
<select name="var[]" multiple="yes">
请注意,如果您使用的是 JavaScript,则元素名称上的[]
在您尝试按名称引用元素时可能会导致问题。请改用其数字表单元素 ID,或将变量名括在单引号中,并将其用作元素数组的索引,例如
variable = document.forms[0].elements['var[]'];
由于 Javascript(通常)是客户端技术,而 PHP(通常)是服务器端技术,并且由于 HTTP 是“无状态”协议,因此这两种语言无法直接共享变量。
但是,可以在两者之间传递变量。实现此目标的一种方法是使用 PHP 生成 Javascript 代码,并让浏览器刷新自身,并将特定变量传回 PHP 脚本。下面的示例准确地展示了如何执行此操作——它允许 PHP 代码捕获屏幕高度和宽度,这通常只有在客户端才能实现。
示例 #4 使用 PHP 生成 Javascript
<?php
if (isset($_GET['width']) AND isset($_GET['height'])) {
// 输出几何变量
echo "屏幕宽度为: ". $_GET['width'] ."<br />\n";
echo "屏幕高度为: ". $_GET['height'] ."<br />\n";
} else {
// 传递几何变量
// (保留原始查询字符串
// -- 发布变量需要以不同的方式处理)
echo "<script language='javascript'>\n";
echo " location.href=\"{$_SERVER['SCRIPT_NAME']}?{$_SERVER['QUERY_STRING']}"
. "&width=\" + screen.width + \"&height=\" + screen.height;\n";
echo "</script>\n";
exit();
}
?>