1

我正在从表中提取一些类别名称,并且正在使用 htmlspecialchars() 来处理我为类别名称返回的字符串。问题是数百个类别名称中的一个正在以错误的结束标记进行回显。这是我正在回显的字符串的简化版本:

$value['CATNAME'] = htmlspecialchars($value['CATNAME']);

echo '<a href="somepage.php?parms=foo">'. $value['CATNAME']. '</a>';

除了坏的链接外,所有链接都正确显示。它被回应为

<a href="somepage.php?parms=foo">AR North/a>

如果没有注释掉 htmlspecialchars() 行,它的输出会带有正确的结束标记。我查看了表中的字符串,也没有任何问题。这似乎是一个 PHP 问题,还是我应该在别处寻找?我怀疑可能有一些 javascript 弄乱了标签,这就是我接下来打算看的地方。

谢谢。

编辑:更新

我现在正在尝试的更详细的代码:

        // Convert characters with special HTML significance
        $value['CATNAME'] = utf8_encode($value['CATNAME']);
        $value['CATNAME'] = htmlspecialchars($value['CATNAME']);
        // Print the list item. If the currently selected Id is equal to the category being listed indicated so by marking it

        if ($selectedCat === $value['CATID'])
            echo '<li id="catSel"><a href="page.php?id=' . $value['parm1'] . '&amp;pl=' . $_SESSION['parm2'] . '">' . $value['CATNAME'] . '</a>';
        else
            echo '<li><a href="page.php?id='. $value['parm1']. '&amp;pl='. $_SESSION['parm2']. '">'. $value['CATNAME']. '</a>';

还在给我

<li><a href="somepage.php?id=185&amp;pl=10">AR North/a></li>

但是如果我将最后一行更改为

$value['CATNAME']. '</a>'; to $value['CATNAME']. ' </a>';

我明白了

<li><a href="catview.php?id=185&amp;pl=10">AR North </a></li>
4

1 回答 1

2

该字符串可能隐藏了一个隐藏的删除字符 (ASCII 127)。尝试以十六进制回显字符串,看看你是否能找到不寻常的东西。有时这是一个简单的编码问题,在运行 htmlspecialchars 之前将字符串编码为 utf-8 可能会修复它。

于 2012-05-10T21:17:50.473 回答