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,浏览器都会对数据进行 urlencode 编码以进行传输,并且 PHP 会直接对数据进行 urldecode 编码。因此,最终您无需自己执行任何 urlencode/urldecode 编码,所有操作都会自动完成。
示例 #3 在 URL 中
<?php
echo '<a href="' . htmlspecialchars("/nextpage.php?stage=23&data=" .
urlencode($data)) . '">'."\n";
?>
注意: 事实上,您正在模拟一个 HTML GET 请求,因此必须手动对数据进行 urlencode() 编码。
注意: 您需要对整个 URL 使用 htmlspecialchars(),因为 URL 作为 HTML 属性的值出现。在这种情况下,浏览器将首先对值进行 htmlspecialchars() 解码,然后传递 URL。PHP 将正确理解 URL,因为您对数据进行了 urlencode() 编码。 您会注意到 URL 中的
&
被替换为&
。尽管大多数浏览器可以恢复,但并非总是如此。因此,即使您的 URL 不是动态的,您也必须对 URL 使用 htmlspecialchars()。
提交表单时,可以使用图像而不是标准提交按钮,方法是使用类似下面的标签
<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();
}
?>