dede中文转拼音函数

织梦中添加分类时填写中文分类名可以自动转换成对应的拼音,该函数位于include/inc/inc_fun_funAdmin.php 第4行到32行.织梦版本为3.1.该函数转换需要的中文拼音数据库位于include/data/pinyin.dat.
详细分析请看代码注释,如有地方分析的不对请高人指点!
function SpGetPinyin( $str , $ishead = 0 , $isclose = 1 )
{
// 全部数组$pinyins
global $pinyins ;
$restr = “” ; // 初始化返回字符串变量
$str = trim ( $str ); // 去空格
$slen = strlen ( $str ); // 得到字符串长度
if ( $slen < 2 ) return $str ; // 如果小于2则返回
if ( count ( $pinyins ) == 0 ) // 如果全局数组$pingyins长度为0
{
$fp = fopen ( dirname ( __FILE__ ) . ” /../data/pinyin.db ” , ” r ” ); // 读取pinyin数据库
while ( ! feof ( $fp )) // 循环至文件结束位置
{
$line = trim ( fgets ( $fp )); // 从文件指针中读取一行并去除空格
//$line[0].$line[1]中文字,作为数组索引
//substr($line,3,strlen($line)-3)得到该字对应的拼音
$pinyins [ $line [ 0 ] . $line [ 1 ]] = substr ( $line , 3 , strlen ( $line ) – 3 );
}
fclose ( $fp );
}
for ( $i = 0 ; $i < $slen ; $i ++ )
{
if ( ord ( $str [ $i ]) > 0x80 ) // 如果第i的字符的ASCII编码大于0x80(确认为中文字)
{

$c = $str [ $i ] . $str [ $i + 1 ]; // 拼接字符编码
$i ++ ;
if ( isset ( $pinyins [ $c ])) // 如果$pinyin数组中含有该索引
{
// $ishead == 0 取全部拼音
if ( $ishead == 0 ) $restr .= $pinyins [ $c ];
// 只取拼音第一个字母
else $restr .= $pinyins [ $c ][ 0 ];
} else $restr .= ” _ ” ; // 如果没有索引则使用_替代
}
else if ( eregi ( ” [a-z0-9] ” , $str [ $i ]) ) // 如果不是中文字是字母和数字
{
$restr .= $str [ $i ]; // 直接连接字符串
}
else // 如果都不是
{
$restr .= ” _ ” ; // 使用_替代
}
}
// 根据参数注销$pinyins
if ( $isclose == 0 ) unset ( $pinyins );
// 返回转换好的拼音
return $restr ;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值