首页 > 网站 > 帮助中心 > 正文

织梦CMS中文转换拼音函数研究

2019-09-08 23:51:05
字体:
来源:转载
供稿:网友
  【黑.客.武.林】导读:析的不对请高人指点! 1 function SpGetPinyin( $str , $ishead = 0 , $isclose = 1 )    2 {    3 // 全部数组$pinyins    4 global $pinyins ;    5 $restr = "" ; // 初始化返回字符串变量    6 $str = trim ( $str ); // 去空格    7 $slen = strlen ( $str ); // 得到字...
 
 
  正文:

 织梦中添加分类时填写中文分类名可以自动转换成对应的拼音,该函数位于include/inc/inc_fun_funAdmin.php 第4行到32行.织梦版本为3.1.该函数转换需要的中文拼音数据库位于include/data/pinyin.db.
  详细分析请看代码注释,如有地方分析的不对请高人指点! 1 function SpGetPinyin( $str , $ishead = 0 , $isclose = 1 )
   2 {
   3 // 全部数组$pinyins
   4 global $pinyins ;
   5 $restr = "" ; // 初始化返回字符串变量
   6 $str = trim ( $str ); // 去空格
   7 $slen = strlen ( $str ); // 得到字符串长度
   8 if ( $slen < 2 ) return $str ; // 如果小于2则返回
   9 if ( count ( $pinyins ) == 0 ) // 如果全局数组$pingyins长度为0
  10 {
  11 $fp = fopen ( dirname ( __FILE__ ) . " /../data/pinyin.db " , " r " ); // 读取pinyin数据库
  12 while ( ! feof ( $fp )) // 循环至文件结束位置
  13 {
  14 $line = trim ( fgets ( $fp )); // 从文件指针中读取一行并去除空格
  15 //$line[0].$line[1]中文字,作为数组索引
  16 //substr($line,3,strlen($line)-3)得到该字对应的拼音
  17 $pinyins [ $line [ 0 ] . $line [ 1 ]] = substr ( $line , 3 , strlen ( $line ) - 3 );
  18 }
  19 fclose ( $fp );
  20 }
  21 for ( $i = 0 ; $i < $slen ; $i ++ )
  22 {
  23 if ( ord ( $str [ $i ]) > 0x80 ) // 如果第i的字符的ASCII编码大于0x80(确认为中文字)
  24 {
  25
  26 $c = $str [ $i ] . $str [ $i + 1 ]; // 拼接字符编码
  27 $i ++ ;
  28 if ( isset ( $pinyins [ $c ])) // 如果$pinyin数组中含有该索引
  29 {
  30 // $ishead == 0 取全部拼音
  31 if ( $ishead == 0 ) $restr .= $pinyins [ $c ];
  32 // 只取拼音第一个字母
  33 else $restr .= $pinyins [ $c ][ 0 ];
  34 } else $restr .= " _ " ; // 如果没有索引则使用_替代
  35 }
  36 else if ( eregi ( " [a-z0-9] " , $str [ $i ]) ) // 如果不是中文字是字母和数字
  37 {
  38 $restr .= $str [ $i ]; // 直接连接字符串
  39 }
  40 else // 如果都不是
  41 {
  42 $restr .= " _ " ; // 使用_替代
  43 }
  44 }
  45 // 根据参数注销$pinyins
  46 if ( $isclose == 0 ) unset ( $pinyins );
  47 // 返回转换好的拼音
  48 return $restr ;
  49 }

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表