如何将汉字转换为UTF-16编码单元?

How to convert a Chinese character to UTF-16 code units?

我正在为这个 Web 开发项目使用 PHP。现在,我正在开发一个用户页面,用户可以在其中添加他知道的单词。当然,我开始的时候很粗糙,没有添加任何特殊功能,比如你知道这个角色建议等

我已经解决了在我的 MySQL 数据库中添加 UTF-16 排序规则和字符集设置为 UTF-16 的挑战,实际上是在 http://freemysqlhosting.net 在线支持我的网站中的中文字符。现在我正在苦苦挣扎的是支持自动为我的汉字生成拼音。

我在搜索所有 SO 后找到了这个:https://github.com/reorx/pinyindep/blob/master/Uni2Pinyin。每行以一个汉字开头,采用 UTF-16 代码单元。

举个例子,爱。在 UTF-16 中,它是 7231。我将其转换为 https://r12a.github.io/apps/conversion/。当我在文件中进行查找时,我得到了相关联的拼音。 :D 这是我需要的功能,尽管在 GitHub 中查找它是在 JS 中,而不是在 PHP.

人工查找返回的是ai4,是正确的语调。现在,我正在寻找的是 PHP 内置库,或者将此字符串输入(比方说“爱”)转换为 UTF-16 四字符代码单元的代码片段,例如此处 7321.

那么问题是什么:

如何将字符串形式的汉字转换为UTF-16编码单元? (通过内置库,或通过建议的 PHP 代码片段)

P.S。我不太喜欢第三方工具,除非它们真的在世界范围内流行,或者没有其他选择。

您需要使用 PHP 的 multibyte string 模块:

$c = "爱";
list(, $d) = unpack('N', mb_convert_encoding($c, 'UCS-4BE', 'UTF-8'));
echo dechex($d);
// => 7231

如果您的字符串以该编码来自数据库,请将 UTF-8 更改为 UTF-16

mb_convert_encoding will change the string into four-byte-per-character encoding; then unpack converts the four bytes into an unsigned long; finally, converting to hexadecimal string using dechex.

如果您使用的是 PHP 7.2+,您可以使用 mb_ord 来简化转换。

echo dechex(mb_ord("爱"));