Home >Backend Development >PHP Tutorial >PHP中文转拼音(支持20378汉字)

PHP中文转拼音(支持20378汉字)

WBOY
WBOYOriginal
2016-06-13 12:10:511307browse

PHP汉语转拼音(支持20378汉字)



PHP汉语转拼音(支持20378汉字)

 在项目中需要通过php来实现抽取汉字的拼音功能,当时实现的方式使用GB2312的字库来实现的,但是在项目中发现像”咔咔“这样的汉字就无能为力了,抽取不出来正确的拼音了。GB2312类库的版本地址:http://blog.csdn.net/wgw335363240/article/details/38588151

   为了能够尽可能多的正确抽取出汉字的拼音,参考了pinyin4j.jar的java实现,把汉语拼音的抽取转换为php版本,经测试,使用到的汉字基本都可以转换正确。在转换的过程中,php引擎需要安装了”mbstring“类库的支持,因为php引擎默认是使用iso-8859-1编码来实现的(即strlen('中国')的长度为6,相当于java中的”中国“.getBytes().length,它的长度也为6,当时java提供了”中国“.tochars()的实现,这个方法得到的chars集合长度为2,实际上就是按照汉字来遍历的),mbstring类库就相当于java中的tochars方法,把字符串按照汉字来遍历。如果不安装类库,还要自己根据utf8编码的规则类遍历byte,从而实现对汉字的拼音的抽取。

   注意:

   (1)php需要支持mbstring类库

   (2)php要是使用utf-8编码编写,这里比较懒,没有编写支持其他语言

   汉字转换拼音的原理如下:

   (1)定义Unicode与拼音的映射字典(在php体现为数组),该字典从pinyin4j.jar文件,去掉了多音字和声调

   (2)输入一个汉字如”严厉“,利用mbstring类库解析为”严“和”厉“两个字符

   (3)把解析后的”严“和”厉“依次调用相关方法抽取一个汉字的拼音,如先抽取”严“

   (4)把”严“字(此时是3个byte编码)转换为Unicode码(4E25,十进制为:20005)

   (5)把Unicode码(4E25)与字典的key进行比较,获取到对应的拼音

   (6)”厉”字也采取同样的策略来抽取拼音

   抽取效率:

       抽取一个汉字的时间:0.00076600000000004秒

   代码:

         上传到资源中,现在上传不上去。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn