正如标题所述,我正在尝试使用PHP将字符»
转换为其HTML实体。这不是我们的最终解决方案,而是在其他一些重大更改完成之前,我们需要作为快速修复。
我正在尝试使用以下代码进行测试,但它无法按照我的意愿进行。
<form action="test.php" method="post">
<input type="text" name="test" />
<input type="submit" value="Go" />
</form>
<?php
if (isset($_POST['test'])){
$converted = preg_replace('/xbb/', '»', $_POST['test']);
echo '<div>Original: '.$_POST['test'].'</div>';
echo '<div>Converted: '. $converted.'</div>';
}
?>
转换为正确,但是在»
之前,我们在Firefox的视图源中显示出一个额外的角色,只是一个?在广场上,但我不确定实际是什么或为什么它在那里。
请有人帮忙吗?谢谢。
»
是utf-8中的 c2 bb
,但是 bb
in ISO-8859-1中。
在未编码UTF-8的页面上输出此内容时,您会看到类似的内容:
» or
�»
机会是,角色通过UTF-8发布。这意味着第二个字节被替换,但第一个字节剩下,因此您最终会得到c2
,然后是»
尝试
$converted = preg_replace('/xbb/u', '»', $var);
或
$converted = preg_replace('/xc2xbb/', '»', $var);
添加u
修饰符:
$converted = preg_replace('/xbb/u', '»', $_POST['test']);
Unicode中的»
字符表示为十六进制00bb
。您的正则是仅匹配第二个字节,因此您仍然剩下一个空字节。这将有效:
$converted = preg_replace('/x00xbb/', '»', $_POST['test']);
或者您可以使用另一个专门用于匹配Unicode字符的修饰符,但我不太了解PHP,无法自信地说什么。