1

正如标题所说,我正在尝试使用 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 的视图源中显示为 ? 在一个广场上,但我不确定它实际上是什么或它为什么在那里。

请问有人可以帮忙吗?谢谢你。

4

3 回答 3

0

添加u修饰符:

$converted = preg_replace('/\xbb/u', '&raquo;', $_POST['test']);
于 2012-10-23T11:53:23.100 回答
0

»unicode中的字符表示为十六进制00bb。您的正则表达式仅匹配第二个字节,因此您仍然有一个空字节。这会起作用:

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

或者您可以使用另一个专门用于匹配 unicode 字符的修饰符,但我对 PHP 的了解不够充分,无法自信地说出什么会起作用。

于 2012-10-23T11:59:59.023 回答
0

»c2 bbUTF-8 但bb在 ISO-8859-1 中。

在非 UTF-8 编码的页面上输出此内容时,您会看到如下内容:

» or 
�»

很有可能,该字符是通过 UTF-8 发布的。这意味着第二个字节正在被替换,但第一个字节仍然存在,所以你最终会c2跟着&raquo;

尝试

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

或者

$converted = preg_replace('/\xc2\xbb/', '&raquo;', $var);
于 2012-10-23T12:00:33.980 回答