php获取UTF-8字形的unicode代码点

时间:2015-01-06 16:35:28

标签: php unicode

我需要获取字形的十六进制unicode代码点。

我正在做的事情大多数的时间是:

$hex = dechex(unpack('V', iconv('UTF-8', 'UCS-4LE', $glyph)[1]);

如果ut失败:

ȳ ȳ ȳ ȳ ȳ

所有这些都返回233但233只在第一个实例中正确。其他是不同的字形,呈现不同。

当涉及多个变音标记时似乎失败了,但有时候它会正确。

为什么会这样失败?

1 个答案:

答案 0 :(得分:1)

因为组成文本的方式取决于组成它的软件,除非该软件提供保证,或者你指出normalize输入,你实际上无法做出假设。

即使在最简单的(第一个)示例中,输入也可以合理地由单个字形LATIN SMALL LETTER Y WITH MACRON'(U + 0233)或两个代码点组合LATIN SMALL LETTER Y(U + 0079)和组合MACRON(U + 0304)。在每种情况下,您会得到不同的结果,即使输入在视觉上和语义上是相同的(唯一的区别在于字节方式,这是一个实现细节)。