说明:
一个PHP函数,可以将UTF-8编码的汉字转换为拼音首字母,由GBK的汉字转拼音首字母的函数修改而来。只转换GBK编码内的汉字,标点、字母及GBK内没有的汉字将直接输出不转换。
用法:
echo $str = 'Hi,YOU想BU想试1下?'; echo pingyinFirstChar($str); // 输出:Hi,YOUXBUXS1X?
下载:
pinyinFirstChar.fn.php.tar.gz (为什么此附件的地址不能分享给朋友们下载?)
代码:
<?php /************************************************************************************************ ** 说明:获取中文拼音首字母 ** 注意:接受的字符编码为UTF-8,但只转换GB2312字符集内的字符。 ** 作者:upall ** 日期:2010-01-28 ** --------------------------------------------------------------------------------------------- ** @param String $sourcestr 需要处理的字符串 ** --------------------------------------------------------------------------------------------- ** 例子:字符串“很多 很多 的汉字,编码是UTF-8”将返回“HD HD DHZ,BMSUTF-8”。 ************************************************************************************************/ function pingyinFirstChar($sourcestr){ $returnstr=''; $i=0; $n=0; $str_length=strlen($sourcestr);//字符串的字节数 while ($i<=$str_length) { $temp_str=substr($sourcestr,$i,1); $ascnum=Ord($temp_str);//得到字符串中第$i位字符的ascii码 if ($ascnum>=224){ //如果ASCII位高与224, $returnstr=$returnstr.getHanziInitial(substr($sourcestr,$i,3)); //根据UTF-8编码规范,将3个连续的字符计为单个字符 $i=$i+3; //实际Byte计为3 }else if($ascnum>=192){ //如果ASCII位高与192, $returnstr=$returnstr.getHanziInitial(substr($sourcestr,$i,2)); //根据UTF-8编码规范,将2个连续的字符计为单个字符 $i=$i+2; //实际Byte计为2 }else if($ascnum>=65 && $ascnum<=90){ //如果是大写字母, $returnstr=$returnstr.substr($sourcestr,$i,1); $i=$i+1; //实际的Byte数仍计1个 }else{ //其他情况下,包括小写字母和半角标点符号, $returnstr=$returnstr.strtoupper(substr($sourcestr,$i,1)); //小写字母转换为大写 $i=$i+1; //实际的Byte数计1个 } } return $returnstr; } function getHanziInitial($s0){ if(ord($s0) >= "1" and ord($s0) <= ord("z")){ return strtoupper($s0); } $s = iconv("UTF-8", "gb2312//IGNORE", $s0); // 不要转换成GB2312内没有的字符哦,^_^ $asc = @ord($s{0}) * 256 + @ord($s{1})-65536; if($asc >= -20319 and $asc <= -20284)return "A"; if($asc >= -20283 and $asc <= -19776)return "B"; if($asc >= -19775 and $asc <= -19219)return "C"; if($asc >= -19218 and $asc <= -18711)return "D"; if($asc >= -18710 and $asc <= -18527)return "E"; if($asc >= -18526 and $asc <= -18240)return "F"; if($asc >= -18239 and $asc <= -17923)return "G"; if($asc >= -17922 and $asc <= -17418)return "H"; if($asc >= -17417 and $asc <= -16475)return "J"; if($asc >= -16474 and $asc <= -16213)return "K"; if($asc >= -16212 and $asc <= -15641)return "L"; if($asc >= -15640 and $asc <= -15166)return "M"; if($asc >= -15165 and $asc <= -14923)return "N"; if($asc >= -14922 and $asc <= -14915)return "O"; if($asc >= -14914 and $asc <= -14631)return "P"; if($asc >= -14630 and $asc <= -14150)return "Q"; if($asc >= -14149 and $asc <= -14091)return "R"; if($asc >= -14090 and $asc <= -13319)return "S"; if($asc >= -13318 and $asc <= -12839)return "T"; if($asc >= -12838 and $asc <= -12557)return "W"; if($asc >= -12556 and $asc <= -11848)return "X"; if($asc >= -11847 and $asc <= -11056)return "Y"; if($asc >= -11055 and $asc <= -10247)return "Z"; return $s0; // 返回原字符,不作转换。(标点、空格、繁体字都会直接返回) } ?>
<完>