PHP实现汉字转拼音类(一)

您好,欢迎来到百闽人生网登录 注册

百闽首页 | 考试日历 | 百闽娱乐 | 书信频道 | 节日庆典 | 语录句子 | 免费发布培训课程

百闽人生网

百闽人生网 > 培训新闻 > 电脑/IT > PHP实现汉字转拼音类(一)

PHP实现汉字转拼音类(一)

PHP实现汉字转拼音类,GB2312标准共收录6763个汉字,不在范围内的汉字是无法转换,如:中国前总理朱镕基的“镕”字。

GB2312中对所收汉字进行了“分区”处理,每区含有94个汉字/符号。这种表示方式也称为区位码。

01-09区为特殊符号。

16-55区为一级汉字,按拼音排序。(3755个)

56-87区为二级汉字,按部首/笔画排序。(3008个)

10-15区及88-94区则未有编码。

占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。所以实际共6763个汉字。其中一级汉字3755个,二级汉字3008个。而此类算法实际只能转换3755个汉字。

优点:没有使用大文字库,文件相对较小,没有使用正则表达式,性能相对较高。支持首字母转换。

缺点:只能转换3755个汉字,多音字无法识别。

具体代码如下:

<?php

// 此类是根据ASCII码转换,GB2312库对多音字也无能为力,此类优点是性能比较高。

// GB2312标准共收录6763个汉字,此类的算法只支持其中的一级汉字3755个,不在范围内的汉字是无法转换,如:中国前总理朱镕基的“镕”字。

class pinyin{

public static function utf8_to($s, $isfirst = false) {

return self::to(self::utf8_to_gb2312($s), $isfirst);

}

public static function utf8_to_gb2312($s) {

return iconv("UTF-8", "GB2312//IGNORE", $s);

}

// 字符串必须为GB2312编码

public static function to($s, $isfirst = false) {

$res = "";

$len = strlen($s);

$pinyin_arr = self::get_pinyin_array();

for($i=0; $i<$len; $i++) {

$ascii = ord($s[$i]);

if($ascii > 0x80) {

$ascii2 = ord($s[++$i]);

$ascii = $ascii * 256 + $ascii2 - 65536;

}

if($ascii < 255 && $ascii > 0) {

if(($ascii >= 48 && $ascii <= 57) || ($ascii >= 97 && $ascii <= 122)) {

$res .= $s[$i]; // 0-9 a-z

}elseif($ascii >= 65 && $ascii <= 90) {

$res .= strtolower($s[$i]); // A-Z

}else{

$res .= "_";

}

}elseif($ascii < -20319 || $ascii > -10247) {

$res .= "_";

}else{

foreach($pinyin_arr as $py=>$asc) {

if($asc <= $ascii) {

$res .= $isfirst ? $py[0] : $py;

break;

}

}

}

}

return $res;

}

public static function to_first($s) {

$ascii = ord($s[0]);

if($ascii > 0xE0) {

$s = self::utf8_to_gb2312($s[0].$s[1].$s[2]);

}elseif($ascii < 0x80) {

if($ascii >= 65 && $ascii <= 90) {

return strtolower($s[0]);

}elseif($ascii >= 97 && $ascii <= 122) {

return $s[0];

}else{

return false;

}

}

if(strlen($s) < 2) {

return false;

}

$asc = ord($s[0]) * 256 + ord($s[1]) - 65536;

if($asc>=-20319 && $asc<=-20284) return "a";

if($asc>=-20283 && $asc<=-19776) return "b";

if($asc>=-19775 && $asc<=-19219) return "c";

if($asc>=-19218 && $asc<=-18711) return "d";

if($asc>=-18710 && $asc<=-18527) return "e";

if($asc>=-18526 && $asc<=-18240) return "f";

if($asc>=-18239 && $asc<=-17923) return "g";

if($asc>=-17922 && $asc<=-17418) return "h";

if($asc>=-17417 && $asc<=-16475) return "j";

if($asc>=-16474 && $asc<=-16213) return "k";

if($asc>=-16212 && $asc<=-15641) return "l";

if($asc>=-15640 && $asc<=-15166) return "m";

if($asc>=-15165 && $asc<=-14923) return "n";

if($asc>=-14922 && $asc<=-14915) return "o";

if($asc>=-14914 && $asc<=-14631) return "p";

if($asc>=-14630 && $asc<=-14150) return "q";

if($asc>=-14149 && $asc<=-14091) return "r";

if($asc>=-14090 && $asc<=-13319) return "s";

if($asc>=-13318 && $asc<=-12839) return "t";

if($asc>=-12838 && $asc<=-12557) return "w";

if($asc>=-12556 && $asc<=-11848) return "x";

if($asc>=-11847 && $asc<=-11056) return "y";

if($asc>=-11055 && $asc<=-10247) return "z";

return false;

}

首页 1 2 3 下页 

关于我们 | 招生合作 | 负责声明 | 常见问题 | 诚聘英才 | 联系我们

Copyright©2014 www.bminlife.com 百闽人生网 版权所有©百闽人生网 闽ICP备14001301号
本文标题:PHP实现汉字转拼音类
分站加盟及广告服务QQ:1476191318
友情提示:本站所有信息均由本站注册会员免费发布,如涉及版权问题或虚假信息请及时与本站联系。——我们一直在追求真实!