PHP表单变量和POST - HTML编码字符串

时间:2010-08-26 12:40:56

标签: php html forms

我的PHP知识不强,但我以前从未见过这个。在配置文件中,有一个在数组中定义的选项列表,如下所示:

$testarray[] = "None";
$testarray[] = "Item 1 with normal text";
$testarray[] = "Item 2® with html encoded string";
$testarray[] = "Item3® with another html encoded string";

现在,当生成表单时,它为每个循环创建一个简单的单选按钮列表:

foreach ( $testarray as $key=>$item){
echo '<div id="padBottom"><input type="radio" name="formItem"';
    if ( $item == $_SESSION['ss']['selection']) echo ' checked="checked"';
    echo ' value="' . $item. '" />' . $item. '</div>';
}

到目前为止,表单生成的应有尽有。无效的部分是If语句部分。在此表单发布到的页面上,它只是设置$_SESSION['ss']['selection'] = $_POST['formItem'];的简单调用。当发生这种情况时,进入会话的值是实际注册的商标符号,而不是我期望的'&reg;'。因此,如果您选择包含HTML编码实体的项目,我们就无法获得匹配,您的选择似乎也会丢失。在此示例中,选择第一个或第二个选项会导致选择正确的单选按钮 - 如果选择选项3或4,则返回此屏幕时似乎没有选择。

附加信息 - 此页面的字符集为UTF-8,如果这在这里有所不同。

我尝试过的事情

  1. 下一页中POST变量的htmlspecialchars:结果,没有,仍显示实际符号。
  2. 每个广播选项的表单值上的htmlspecialchars:结果,我得到&amp;reg;作为我的值的一部分,但是显示效果不佳。

2 个答案:

答案 0 :(得分:3)

某些字符(包括&符号)在HTML中具有特殊含义,如果您不希望特殊含义生效,则必须represent them as entities

在这种情况下,它是您要插入到需要编码的value属性中的变量。

答案 1 :(得分:1)

如果您使用项目的索引而不是其内容,它可能会更好,因为在这种情况下索引只是一个数字:

foreach ( $testarray as $key=>$item) {
  echo '<div id="padBottom"><input type="radio" name="formItem"';
  if ( $key == $_SESSION['ss']['selection']) echo ' checked="checked"';
  echo ' value="' . $key .'" />' . $item. '</div>';
}