显示中文字符而不使用utf8编码?

时间:2014-08-26 19:40:07

标签: php encoding utf-8 character-encoding

我使用unicode_general_ci排序规则从MySQL数据库中提取行。列包含中文字符,如格拉巴酒和蒸馏物,我需要显示这些字符。

知道我应该使用utf-8编码:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

但我无法:我正在处理遗留应用程序,其中大多数.php文件都保存为ANSI并且整个网站都在使用:< / p>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

有没有办法展示它们?

加分问题:我已尝试手动更改Chrome中的编码(工具 - &gt; Encodig - &gt; UTF-8),看起来它不起作用:页面重新加载,但????显示而不是中文字符。

2 个答案:

答案 0 :(得分:3)

您可以显示 使用数字实体引用&#26684;等。在这种情况下,页面的编码无关紧要; HTML实体引用始终引用Unicode代码点。

为此目的,PHP有一个函数htmlentities,但似乎需要使用变通方法来处理数字实体。这个json_encode hack相当模糊,但在程序上可能是最简单的。

echo preg_replace('/\\\\u([0-9a-f]{4})/', '&#x$1;', 
     preg_replace('^/"(.*)"$/', '$1', json_encode($s)));

这充分利用了json_encode巧合地为您进行转换的事实;其余的都是机械师。 (我想这是你的PHP。)

  

IDEone demo

你的“奖金问题”不是一个真正的问题,但当然,这就是它的工作原理; 128-255范围内的原始字节很少是有效的UTF-8序列,因此除非您在页面上拥有的是有效的UTF-8,否则您可能会获得这些字节的“无效字符”替换字形。

为了记录,如果错误地在Windows code page 1252中显示,那么UTF-8文本中的前两个汉字字形将显示为格拉(您,而且经常是Microsoft,不小心将其称为“ANSI”) - 如果您在页面上有这些字节,那么强制浏览器以UTF-8显示它应该实际上也可以作为一种解决方法。

对于其他背景,我建议@ deceze的What Every Programmer Absolutely, Positively Needs to Know About Encodings and Character Sets to Work With Text

答案 1 :(得分:1)

我不确定你能不能。 iso-8859-1通常被称为“拉丁语1”。根本不支持任何亚洲汉字类型的语言。

http://en.wikipedia.org/wiki/ISO/IEC_8859-1

  

ISO 8859-1将它所称的“拉丁字母1号”编码,由拉丁文字母中的191个字符组成。这种字符编码方案在整个美洲,西欧,大洋洲和非洲大部分地区使用。它也常用于东亚语言的大多数标准罗马化。