php繁体拼音字母,[UTF-8]汉字转换为拼音首字母pinyinFirstChar.fn.php

说明:

一个PHP函数,可以将UTF-8编码的汉字转换为拼音首字母,由GBK的汉字转拼音首字母的函数修改而来。只转换GBK编码内的汉字,标点、字母及GBK内没有的汉字将直接输出不转换。

用法:

echo $str = 'Hi,YOU想BU想试1下?';

echo pingyinFirstChar($str); // 输出:Hi,YOUXBUXS1X?

下载:

代码:

/************************************************************************************************

** 说明:获取中文拼音首字母

** 注意:接受的字符编码为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; // 返回原字符,不作转换。(标点、空格、繁体字都会直接返回)

}

?>

<完>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值