2010-08-26 28 views
0

我对PHP的知识并不强,但我从未见过这种情况。在配置文件中,有在一个数组定义像这样的选项列表:PHP表单变量和POST - HTML编码字符串

$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,如果这有什么不同。

事情我已经尝试在接下来的页面上的POST变量

  1. 用htmlspecialchars:结果,什么都没有,仍呈现实际的符号。
  2. htmlspecialchars对每个无线电选项的形式值:结果,我得到&amp;reg;作为我的价值的一部分,显示不好。

回答

3

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

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

+0

感谢输入。我知道它与html编码有关,我只是没有尝试过正确的组合。我尝试了#1以上,然后#2以上#1仍在原地,并没有奏效。但只是简单的HTML编码的价值,而不是在岗位上再次工作很好。谢谢! – Tommy 2010-08-26 13:23:09

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>'; 
} 
+0

是的我同意,我宁愿使用整数键比字符串匹配,但唉,这不是从上次的程序员给我的东西,我不是要重构这个蒸汽堆o代码:) – Tommy 2010-08-26 13:24:10