PHP Conference Japan 2024

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,浏览器都将对数据进行 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 中的&被替换为&amp;。虽然大多数浏览器都会在您忘记此操作时恢复,但这并非总是可能的。因此,即使您的 URL 不是动态的,您也需要htmlspecialchars() URL。

我尝试使用<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