如何使用PHP5正确显示\ uXXXX

时间:2009-07-16 22:27:40

标签: php unicode encoding

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

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

问题是,如何在HTML页面中正确显示?

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

3 个答案:

答案 0 :(得分:4)

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%肯定,但它似乎适合。也许你可以从这里拿走它。

这是一个很好的练习:)

答案 1 :(得分:3)

PHP&lt; 6可怜地不知道Unicode,所以你必须自己做所有事情:

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

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

    2. 使用&lt; meta http-equiv&gt;上述标题的版本。

    3. 设置XML编码参数&lt;?xml encoding =“utf-8”?&gt;

选项1.优先于2.我不确定3.适合的地方。

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

答案 2 :(得分:2)

根据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;
}