我正在使用 unicode_general_ci
排序规则从 MySQL 数据库中获取行。列中包含诸如格拉巴酒和饲养物之类的汉字,我需要显示这些字符。
我知道我应该使用 utf-8 编码:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
但我不能:我正在开发一个遗留应用程序,其中大多数 .php
文件都保存为 ANSI 并且整个网站正在使用:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
有什么办法可以显示它们吗?
额外问题:我尝试手动更改 Chrome 中的编码(工具 -> Encodig -> UTF-8),但似乎不起作用:页面已重新加载,但是? ??显示的不是汉字。
最佳答案
您可以显示格
使用数字实体引用 格
等。在这种情况下,页面的编码应该无关紧要; 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。)
你的“奖励问题”并不是一个真正的问题,但当然,它就是这样运作的; 128-255 范围内的原始字节很少是有效的 UTF-8 序列,因此除非页面上的内容是有效的 UTF-8,否则您可能会得到这些字节的“无效字符”替换字形。
郑重声明,如果在 Windows code page 1252 中错误显示,UTF-8 文本中的前两个中文汉字字形将显示为 æ ¼æ´´´
(您(通常是 Microsoft)不小心将其称为“ANSI”)——如果页面上有这些字节,那么强制浏览器以 UTF-8 显示它实际上也应该作为一种解决方法。
对于其他背景,我推荐@deceze's What Every Programmer Absolutely, Positively Needs to Know About Encodings and Character Sets to Work With Text .
关于php - 不使用utf8编码显示汉字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25513930/