当前位置: 首页 > 知识库问答 >
问题:

打印Unicode字符PHP

郎祯
2023-03-14

我有一个数据库,它存储带有Unicode字符的视频游戏名称,但我不知道如何在将这些Unicode字符打印到超文本标记语言响应时正确转义它们。

例如,当我打印所有名为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 "&#x2122";

请指导我,为了HTML友好,Unicode转义字符串的最佳方法是什么。我曾经为JavaScript做过类似的事情,但是JavaScript有一个内置的escape和unescape函数。

但我不知道有任何类似功能的PHP函数。我读过ord函数,但它只返回给定字符的ASCII字符代码,因此的显示不正确


共有3个答案

谭学名
2023-03-14

试试这个:

echo htmlentities("Uncharted: Drakes Fortune™ \n", ENT_QUOTES, "UTF-8");

发件人:http://php.net/htmlentities

薛利
2023-03-14

我花了很多时间试图找到更好的方法来打印unicode代码的等效字符,但我找到的方法不起作用,或者只是非常复杂。

也就是说,JSON能够使用语法“\u[unicode_code]”来表示unicode字符,然后:

echo json_decode('"\u00e1"'); 

将打印等效的unicode字符,在这种情况下:á。

P.D. 注意简单引号和双引号。如果你不把两者都放,它就不会工作。

莫骞仕
2023-03-14

看起来您内部有UTF-8编码的字符串,PHP正确输出它们,但您的浏览器无法自动检测编码(它决定使用ISO 8859-1或其他编码)。

最好的方法是通过发送相应的HTTP报头来告诉浏览器UTF-8正在被使用:

header("content-type: text/html; charset=UTF-8");  

然后,您可以将其余代码保持原样,而不必对实体进行html编码或创建其他混乱。

如果需要,还可以使用< code >在生成的HTML中声明编码

  • <代码>

HTTP标头优先于

 类似资料:
  • 问题内容: 如果您有一个带有unicode字符的字符串,则可以打印它,并获得未转义的版本: 但是如果我们有一个包含上面字符串的列表并打印出来: 您仍然会获得转义的字符序列。您如何才能使列表的内容不被转义,这可能吗?像这样: 另外,如果字符串是类型,那么您如何与上述相同? 问题答案: 打印字符串时,将获得对象方法的输出- 在这种情况下,该字符串不带引号。列表的方法不同,它创建一个包含打开和关闭的字符

  • 我想正确打印unicode(比如希腊字符),但我有问题。例如: 问题是是否有任何解决方案可以正确打印所有卡哈拉特。我认为对于希腊字符,UTF-16是可以的。

  • 问题内容: 以下内容将替换ASCII控制字符(的缩写): 以下内容将替换所有ASCII不可打印字符(的缩写),包括带重音符号的字符: 但是,两者均不适用于Unicode字符串。有谁能从Unicode字符串中删除不可打印字符的好方法? 问题答案: 详细了解Unicode正则表达式。支持他们。

  • 问题内容: 我有一个相当大的python 2.6应用程序,上面散布着许多打印语句。我一直在使用unicode字符串,通常效果很好。但是,如果我重定向应用程序的输出(例如“ myapp.py> output.txt”),则有时会出现如下错误: 我猜如果有人将LOCALE设置为ASCII也会出现相同的问题。现在,我完全理解此错误的原因。我的Unicode字符串中有些字符无法用ASCII编码。很公平。但

  • 问题内容: 如何在一行中多次打印一个字符?这意味着我不能使用循环。 我正在尝试多次打印。 我尝试了这种方法,但是不起作用: 是变量。 问题答案: 您可以在同一行中进行打印,因此 可以 使用循环。而不是不添加换行符。 将打印:。

  • 这是用C++语言编写的代码。 为什么在第一个cout语句中,程序尝试打印直到它找到一个空字符,而在第二个语句中,它只打印一个字符?