我有一个数据库,它存储带有 Unicode 字符的视频游戏名称,但我不知道如何在将这些 Unicode 字符打印到 HTML 响应时正确转义它们。
例如,当我打印名称为 Uncharted 的所有游戏时,我会得到:
Uncharted: Drake's Fortuneâ„¢
Uncharted 2: Among Thievesâ„¢
Uncharted 3: Drake's Deceptionâ„¢
但它应该显示:
Uncharted: Drake's Fortune™
Uncharted 2: Among Thieves™
Uncharted 3: Drake's Deception™
我运行了一个快速的 JavaScript 转义函数来查看 ™
是哪个 Unicode 字符,并发现它是 \u2122
。
如果我能让 ™
字符正确显示,我完全转义字符串中的每个字符都没有问题。我的猜测是以某种方式找到字符串中每个字符的十六进制表示,并让 PHP 像这样呈现 Unicode 字符:
print "™";
请指导我完成 Unicode 转义字符串以使其对 HTML 友好的最佳方法。前段时间我为 JavaScript 做过类似的事情,但是 JavaScript 有一个内置的转义和取消转义函数。
不过,我不知道有任何具有类似功能的 PHP 函数。我读过 ord函数,但它只返回给定字符的 ASCII 字符代码,因此 ™
或 ™
显示不正确。我希望此函数足够通用以适用于任何包含有效 Unicode 字符的字符串。
最佳答案
看起来您内部有 UTF-8 编码的字符串,PHP 正确输出它们,但您的浏览器无法自动检测编码(它决定使用 ISO 8859-1 或其他编码)。
最好的方法是通过发送相应的 HTTP header 来告诉浏览器正在使用 UTF-8:
header("content-type: text/html; charset=UTF-8");
然后,您可以保持其余代码不变,而不必对实体进行 html 编码或造成其他困惑。
如果需要,您可以另外使用 <meta>
在生成的 HTML 中声明编码。标签:
-
<meta http-equiv=Content-Type content="text/html; charset=UTF-8">
用于 HTML <=4.01 -
<meta charset="UTF-8">
用于 HTML5
HTTP header 优先于 <meta>
标签,但如果将 HTML 保存到 HD 然后在本地读取,后者可能会有用。
关于php - 打印 Unicode 字符 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17539412/