我的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'];
的简单调用。当发生这种情况时,进入会话的值是实际注册的商标符号,而不是我期望的'®'
。因此,如果您选择包含HTML编码实体的项目,我们就无法获得匹配,您的选择似乎也会丢失。在此示例中,选择第一个或第二个选项会导致选择正确的单选按钮 - 如果选择选项3或4,则返回此屏幕时似乎没有选择。
附加信息 - 此页面的字符集为UTF-8,如果这在这里有所不同。
我尝试过的事情
&reg;
作为我的值的一部分,但是显示效果不佳。答案 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>';
}