代码之家  ›  专栏  ›  技术社区  ›  Tommy

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

  •  0
  • Tommy  · 技术社区  · 14 年前

    我的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>';
    }
    

    $_SESSION['ss']['selection'] = $_POST['formItem']; 当这种情况发生时,进入会话的值是实际的注册商标符号,而不是 '&reg;' 如我所料。因此,如果您选择了一个包含HTML编码实体的项目,我们将无法获得匹配项,您的选择将丢失。在本例中,选择第一个或第二个选项将导致选择正确的单选按钮-如果选择选项3或4,则返回此屏幕时,不会显示任何选择。

    我试过的东西

    1. 下一页POST变量上的htmlspecialchars:result,nothing,仍然显示实际符号。
    2. &amp;reg; 作为我价值观的一部分,它没有很好地表现出来。
    2 回复  |  直到 14 年前
        1
  •  3
  •   Quentin    14 年前

    有些字符(包括符号)在HTML中有特殊的含义,你必须 represent them as entities 如果你不想让这个特殊的意义生效。

        2
  •  1
  •   David Knell    14 年前

    如果使用项的索引而不是其内容,则效果会更好,因为在本例中,索引只是一个数字:

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