从另一个PHP脚本中提取嵌入在php脚本中的html下拉列表的选定选项时,我遇到了一个奇怪的问题。如果选项值的单词用空格分隔。 PHP只回显所选选项值的第一个单词。我在这里做错了什么?
list.php
<body>
<form action="extract.php" method="post">
<?php
$one = "one one";
$two = "two two";
$three = "three three";
echo '<select name="selected_item">';
echo '<option value='.$one.'>'.$one.'</option>';
echo '<option value='.$two.'>'.$two.'</option>';
echo '<option value='.$three.'>'.$three.'</option>';
echo '</select>';
?>
<input type="submit" class="button" value="submit" name="submit" />
</form>
</body>
</html>
extract.php
<?php
if (isset($_POST['submit'])) {
$item_name = $_POST['selected_item'];
echo $item_name;
}else{
echo "item not selected";
}
?>
如果我在列表中选择“三个三”,则回声只有“三个”。那是为什么?
答案 0 :(得分:8)
这是因为您没有引用HTML属性。当你有这个代码时:
$three = "three three";
echo '<option value='.$three.'>'.$three.'</option>';
这将以HTML格式显示:
<option value=three three>three three</option>
PHP字符串引号在输出中消失了。只有第一个three
才会成为属性值。另一个只是垃圾。
你需要一个更好的回声:
echo '<option value="'.$three.'">'.$three.'</option>';
在这种情况下,更好的可能是HEREDOC string。并且不要忘记htmlspecialchars()
非静态内容。
答案 1 :(得分:3)
如果我在列表中选择“三个三”,则回声只有“三个”。那是为什么?
这是因为HTML包含信息"three"
作为所选元素的值:
<option value=three three>
示例:包含value=three
和three
(没有值)属性的选项标记。
然后,浏览器将"three"
发送到服务器。 PHP只获取浏览器发送的内容。
您很可能只在HTML表单输出中出错。将HTML标记属性值括在引号中,然后您的浏览器将提交"three three"
作为值,因为引号将保留选项值中的空格:
<option value="three three">
示例:包含一个 value="three three"
属性的选项标记。
这就是HTML的工作方式,浏览器需要解析标签,它的属性和属性值。在HTML 2中最容易解释它是如何工作的:http://www.w3.org/MarkUp/html-spec/html-spec_3.html#SEC3.2.4
另外,请确保使用htmlspecialchars
正确编码HTML的值。以下示例代码为所有选项使用数组,因此代码更加模块化:
$options = array("one one", "two two", "three three");
echo '<select name="selected_item">';
foreach ($options as $option)
{
printf('<option value="%1$s">%1$s</option>', htmlspecialchars($option));
}
echo '</select>';
答案 2 :(得分:0)
你的@sheng只有一个修正不使用直接空间而不是Html_entity空间,
将变量重置为enaugh ...
<?php
$one = "one one";
$two = "two two";
$three = "three three";
?>
你得到你预期的结果
答案 3 :(得分:-1)
这就是引用的用途。
事实上,你的问题与PHP无关 它只与您的代码有关系的基本HTML。
养成观看PHP生成的实际HTML代码的习惯 大部分时间你都可以自己发现问题。或者至少更精确地解决它。 (作为你的情况下的HTML问题,而不是PHP)