php - 不使用utf8编码显示汉字?

标签 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 并且整个网站正在使用:

<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。)

IDEone demo

你的“奖励问题”并不是一个真正的问题,但当然,它就是这样运作的; 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/

相关文章:

python - 有没有一种简单的方法来获得 utf8 编码字符串的子字符串,子字符串的 repr 长度小于 python 中的 N

php - 每 2 小时使用 API 数据更新 MySQL

php - 一个数据库的 MySQL 4 兼容模式下的 MySQL 5?

python - Pandas 数据框中的编码/分解列表

PHP/MySQL : Certain characters not being encoded properly and appearing as question marks

python-2.7 - 我怎样才能得到一个随机的 unicode 字符串

c# - 如何在 c# 中将字符串从 utf8 转换(音译)为 ASCII(单字节)?

php - 如何使用 PHP 解析 .pls 文件? parse_ini_file 有问题

php - 在一个查询中对不同表进行多次插入

encoding - 视频编码和关键帧