【问题标题】:Using PHP convert hex code 0xbb to html entity »使用 PHP 将十六进制代码 0xbb 转换为 html 实体 »
【发布时间】:2012-10-13 08:16:09
【问题描述】:

正如标题所说,我正在尝试使用 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>';
}
?>

转换后似乎是正确的,但我们在 &amp;raquo; 之前得到了一个额外的字符,它在 Firefox 的视图源中显示为 ?在一个广场上,但我不确定它实际上是什么或为什么会在那里。

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

【问题讨论】:

    标签: php regex hex preg-match


    【解决方案1】:

    » 在 UTF-8 中是 c2 bb,但在 ISO-8859-1 中是 bb

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

    » or 
    �»
    

    很有可能,该字符是以 UTF-8 格式发布的。这意味着第二个字节被替换了,但第一个字节仍然存在,所以你最终会得到c2,然后是&amp;raquo;

    试试

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 它是 Unicode 代码点 00 bb,它是 UTF-8 编码为 c2 bb
      • 感谢@dan1111 的回答,在我的情况下它不起作用,但我对它的了解还不够,不知道为什么。
      • @LukeCousins,Craig Mason 关于文件以 UTF-8 编码的说法是正确的。这就是为什么他的答案有效而我的答案无效。很高兴您找到了解决方案。
      【解决方案3】:

      添加u 修饰符:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-29
        • 2012-10-28
        • 2015-04-11
        • 2019-01-01
        • 2018-10-13
        • 2012-05-29
        相关资源
        最近更新 更多