如何将中文字符转换为UTF-16代码单元?

时间:2016-05-23 05:53:34

标签: php character-encoding utf-16

我正在使用PHP进行此Web开发项目。现在,我正在处理用户页面,用户可以在其中添加他知道的单词。当然,我开始粗暴,没有添加任何特殊功能,如你知道这个角色建议等。

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

我在搜索了所有的搜索结果后找到了这个: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 < / b>

那么问题是什么:

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

P.S。我不喜欢第三方工具,除非它们在全球范围内非常受欢迎,或者别无选择。

2 个答案:

答案 0 :(得分:2)

您需要使用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会将字符串更改为每字符四个字节的编码;然后unpack将四个字节转换为无符号长整数;最后,使用dechex转换为十六进制字符串。

答案 1 :(得分:0)

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

echo dechex(mb_ord("爱"));