提取html表单选项值,其间有空格

时间:2011-11-19 09:24:42

标签: php html

从另一个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";
      }

     ?>

如果我在列表中选择“三个三”,则回声只有“三个”。那是为什么?

4 个答案:

答案 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=threethree(没有值)属性的选项标记。

然后,浏览器将"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&nbsp;one";
     $two = "two&nbsp;two";
     $three = "three&nbsp;three";
     ?>

你得到你预期的结果

答案 3 :(得分:-1)

这就是引用的用途。

事实上,你的问题与PHP无关 它只与您的代码有关系的基本HTML。

养成观看PHP生成的实际HTML代码的习惯 大部分时间你都可以自己发现问题。或者至少更精确地解决它。 (作为你的情况下的HTML问题,而不是PHP)