使用 PHP 将十六进制代码0xbb转换为 html 实体 »



正如标题所述,我正在尝试使用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/', '&raquo;', $_POST['test']);
    echo '<div>Original: '.$_POST['test'].'</div>';
    echo '<div>Converted: '. $converted.'</div>';
}
?>

转换为正确,但是在&raquo;之前,我们在Firefox的视图源中显示出一个额外的角色,只是一个?在广场上,但我不确定实际是什么或为什么它在那里。

请有人帮忙吗?谢谢。

»是utf-8中的 c2 bb,但是 bb in ISO-8859-1中。

在未编码UTF-8的页面上输出此内容时,您会看到类似的内容:

» or 
�»

机会是,角色通过UTF-8发布。这意味着第二个字节被替换,但第一个字节剩下,因此您最终会得到c2,然后是&raquo;

尝试

$converted = preg_replace('/xbb/u', '&raquo;', $var);

$converted = preg_replace('/xc2xbb/', '&raquo;', $var);

添加u修饰符:

$converted = preg_replace('/xbb/u', '&raquo;', $_POST['test']);

Unicode中的»字符表示为十六进制00bb。您的正则是仅匹配第二个字节,因此您仍然剩下一个空字节。这将有效:

$converted = preg_replace('/x00xbb/', '&raquo;', $_POST['test']);

或者您可以使用另一个专门用于匹配Unicode字符的修饰符,但我不太了解PHP,无法自信地说什么。

最新更新