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

php Get unicode codepoint for UTF-8 glyph

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

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

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

ut 失败的地方:

Ş ?? ˳̂ コ̀ ˳͂

所有这些 return 233 但 233 仅在第一个实例中是正确的。其他的是不同的字形,呈现方式不同。

当涉及多个变音符号时似乎会失败,但有时会正确。

为什么会这样失败?

因为文本的组成方式取决于组成它的软件,除非该软件提供保证或者您将其指向 normalize 输入,否则您真的无法做出假设。

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