我继承了一个包含字符串的数据库,如:
\ 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来处理字符串。
答案 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,所以你必须自己做所有事情:
让浏览器知道您正在使用哪种编码。有几种方法可以做到这一点:
在Content-Type标头中设置charset值。就像是 标题('Content-Type:text / html; charset = utf-8');
使用&lt; meta http-equiv&gt;上述标题的版本。
设置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;
}