PHP 和 HTML

PHP 和 HTML 之间有大量的交互:PHP 可以生成 HTML,而 HTML 可以将信息传递给 PHP。在阅读这些常见问题解答之前,您必须先了解如何从外部来源检索 变量。此主题的手册页包含许多示例。

通过表单/URL 传递值时,我需要进行哪些编码/解码?

编码对于几个阶段至关重要。假设您有一个 字符串 $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 中的 & 被替换为 &amp;。尽管大多数浏览器可以恢复,但并非总是如此。因此,即使您的 URL 不是动态的,您也必须对 URL 使用 htmlspecialchars()

我尝试使用 <input type="image"> 标签,但是 $foo.x$foo.y 变量不可用。 $_GET['foo.x'] 也不存在。它们在哪里?

提交表单时,可以使用图像而不是标准提交按钮,方法是使用类似下面的标签

<input type="image" src="image.gif" name="foo" />
当用户点击图像上的某个地方时,相应的表单将与两个附加变量一起传输到服务器:foo.xfoo.y

因为 foo.xfoo.y 在 PHP 中将构成无效的变量名,所以它们会自动转换为 foo_xfoo_y。也就是说,句点会被下划线替换。因此,您可以像在获取 变量 的部分中描述的那样访问这些变量。例如,$_GET['foo_x']

注意:

请求变量名中的空格将转换为下划线。

如何在 HTML <form> 中创建数组?

要使您的 <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[]" />
这会生成两个数组,MyArray 和 MyOtherArray,它们会被发送到 PHP 脚本。还可以将特定键分配到数组中
<input name="AnotherArray[]" />
<input name="AnotherArray[]" />
<input name="AnotherArray[email]" />
<input name="AnotherArray[phone]" />
AnotherArray 数组现在将包含键 0、1、email 和 phone。

注意:

在 HTML 中指定数组键是可选的。如果您没有指定键,则数组将按元素在表单中出现的顺序填充。我们的第一个示例将包含键 0、1、2 和 3。

另请参见 数组函数外部来源的变量

如何获取 HTML select multiple 标签的所有结果?

HTML 结构中的 select multiple 标签允许用户从列表中选择多个项目。这些项目随后会传递到表单的操作处理程序。问题是它们都使用相同的窗口小部件名称传递。例如

<select name="var" multiple="yes">
每个选定选项都将作为
var=option1
var=option2
var=option3
      
到达操作处理程序的每个选项都会覆盖先前 $var 变量的内容。解决方法是使用 PHP 的“从表单元素生成数组”功能。应使用以下内容
<select name="var[]" multiple="yes">
这告诉 PHP 将 $var 视为一个数组,并且对 var[] 的每次值赋值都会向数组中添加一个项目。第一个项目将成为 $var[0],下一个将成为 $var[1],依此类推。可以使用 count() 函数确定选择了多少个选项,如果需要,可以使用 sort() 函数对选项数组进行排序。

请注意,如果您使用 JavaScript,元素名称上的 [] 可能会在您尝试按名称引用该元素时导致问题。请改用其数字形式的元素 ID,或者将变量名括在单引号中,并将其用作元素数组的索引,例如

variable = document.forms[0].elements['var[]'];
      

如何将变量从 Javascript 传递到 PHP?

由于 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();
}
?>

添加备注

用户贡献的注释

此页面没有用户贡献的注释。
To Top