【问题标题】:How to get \uXXXX to display correctly, using PHP5如何让 \uXXXX 正确显示,使用 PHP5
【发布时间】:2010-11-11 13:22:54
【问题描述】:

我继承了一个包含以下字符串的数据库:

\u5353\u8d8a\u4e9a\u9a6c\u900a: \u7f51\u4e0a\u8d2d\u7269: \u5728\u7ebf\u9500\u552e\u56fe\u4e66\uff0cDVD\uff0cCD\uff0c\u6570\u7801\uff0c\u73 u5177\uff0c\u5bb6\u5c45\uff0c\u5316\u5986

问题是,我怎样才能让它在 HTML 页面中正确显示?

我正在使用 PHP5 来处理字符串。

【问题讨论】:

  • 为了清楚起见...它包含文字字符串“\\u5353”,还是那些代码点?如果是前者,我为你祈祷:)
  • 数据库包含上面显示的文字字符串。

标签: php unicode encoding


【解决方案1】:

1) 我下载并安装了一个名为CODE2000的unicode字体

2) 我写了这个:

<?php header('Content-Type: text/html;charset=utf-8'); ?>
<head></head>
<body style="font-family: CODE2000">
<?php
// I had to remove some strings like ': ', 'DVD', 'CD' to make it in \uXXXX format
$s = '\u5353\u8d8a\u4e9a\u9a6c\u900a\u7f51\u4e0a\u8d2d\u7269\u5728\u7ebf\u9500\u552e\u56fe\u4e66\uff0c\uff0c\uff0c\u6570\u7801\uff0c\u73a9\u5177\uff0c\u5bb6\u5c45\uff0c\u5316\u5986';
$chars = explode('\\u', $s);
foreach ($chars as $char) {
  $c = iconv('utf-16', 'utf-8', hex2str($char));
  print $c;
}

function hex2str($hex) {
  $r = '';
  for ($i = 0; $i < strlen($hex) - 1; $i += 2)
    $r .= chr(hexdec($hex[$i] . $hex[$i + 1]));
  return $r;
}
?>
</body>
</html>

3) 它产生了这个characters http://img267.imageshack.us/img267/9759/49139858.png,这可能是正确的。例如。第一个字符(5353)确实是this,而第二个字符(8d8a)是this。当然,我不能 100% 确定,但它似乎很合适。也许你可以从这里拿走。

这是一个很好的练习:)

【讨论】:

    【解决方案2】:

    PHP

    • 确保您的数据库对其连接使用支持 Unicode 的编码。例如,在 MySQL 中,指令是 default-character-set = 。 UTF-8 是一个合理的选择
    • 让浏览器知道您使用的是哪种编码。有几种方法可以做到这一点:

      1. 在 Content-Type 标头中设置一个字符集值。就像是 header('Content-Type: text/html;charset=utf-8');

      2. 使用上述标头的 版本。

      3. 设置XML编码参数

    选项 1. 优先于 2. 我不确定 3. 适合哪里。

    如果您需要在显示数据之前进行任何字符串处理,请确保使用多字节 (mb_*) 字符串函数。如果您有来自其他来源的其他编码的 Unicode 数据,则需要使用 mb_convert_encoding。

    【讨论】:

      【解决方案3】:

      根据daremon 的提交,这里有一个“unicode_decode”函数,可以将\uXXXX 转换为对应的UTF。

      function unicode_decode($str){
          return preg_replace("/\\\u([0-9A-F]{4})/ie", "iconv('utf-16', 'utf-8', hex2str(\"$1\"))", $str);    
      }
      function hex2str($hex) {
          $r = '';
          for ($i = 0; $i < strlen($hex) - 1; $i += 2)
          $r .= chr(hexdec($hex[$i] . $hex[$i + 1]));
          return $r;
      }
      

      【讨论】:

      • 我不太确定 iconv() 是做什么的... PHP 手册现在已经下架了。
      猜你喜欢
      • 2022-12-07
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      • 1970-01-01
      • 2011-02-19
      • 2015-05-12
      • 2015-06-12
      • 1970-01-01
      相关资源
      最近更新 更多