帝国CMS增加栏目生成拼音乱码解决方法

在使用帝国CMS7.5增加栏目生成拼音的时候,有时候会发现生成的栏目名称是乱码,这也算是一个小问题,今天就解决一下!

帝国CMS乱码解决方法:

修改e/class/connect.php文件,找到ReturnPinyinFun函数,改名为ReturnPinyinFun_BAK,将下列代码粘贴在下面:


//修正后的返回拼音

function ReturnPinyinFun($hz){

                global $ecms_config;

                include_once(ECMS_PATH.
‘e/class/pinyin.php’);

                $py =
new PinYin();

                $all_py = $py->get_all_py(trim($hz));

               
return join(
,$all_py);

}

 

将附件pinyin.php复制到e/class目录下,pinyin.php代码:

<?php


/**
  * +——————————————————
  * PHP 汉字转拼音
  * +——————————————————
  * 使用方法:
  * $py = new PinYin();
  * $all_py = $py->get_all_py(“白白”);//输出 [‘bai’,’bai’],输出字符串调用join方法,join(”,$all_py)
  * $first_py = $py->get_first_py($all_py);//输出 wgw
  * $first_letter = $py->get_first_letter($all_py);// 输出 w
  *
  * +——————————————————
  */



class PinYin

{

       
private $dict_list = array(

               
‘a’ => –
20319,
‘ai’ => –
20317,
‘an’ => –
20304,
‘ang’ => –
20295,
‘ao’ => –
20292,

               
‘ba’ => –
20283,
‘bai’ => –
20265,
‘ban’ => –
20257,
‘bang’ => –
20242,
‘bao’ => –
20230,
‘bei’ => –
20051,
‘ben’ => –
20036,
‘beng’ => –
20032,
‘bi’ => –
20026,
‘bian’ => –
20002,
‘biao’ => –
19990,
‘bie’ => –
19986,
‘bin’ => –
19982,
‘bing’ => –
19976,
‘bo’ => –
19805,
‘bu’ => –
19784,

               
‘ca’ => –
19775,
‘cai’ => –
19774,
‘can’ => –
19763,
‘cang’ => –
19756,
‘cao’ => –
19751,
‘ce’ => –
19746,
‘ceng’ => –
19741,
‘cha’ => –
19739,
‘chai’ => –
19728,
‘chan’ => –
19725,
‘chang’ => –
19715,
‘chao’ => –
19540,
‘che’ => –
19531,
‘chen’ => –
19525,
‘cheng’ => –
19515,
‘chi’ => –
19500,
‘chong’ => –
19484,
‘chou’ => –
19479,
‘chu’ => –
19467,
‘chuai’ => –
19289,
‘chuan’ => –
19288,
‘chuang’ => –
19281,
‘chui’ => –
19275,
‘chun’ => –
19270,
‘chuo’ => –
19263,
‘ci’ => –
19261,
‘cong’ => –
19249,
‘cou’ => –
19243,
‘cu’ => –
19242,
‘cuan’ => –
19238,
‘cui’ => –
19235,
‘cun’ => –
19227,
‘cuo’ => –
19224,

               
‘da’ => –
19218,
‘dai’ => –
19212,
‘dan’ => –
19038,
‘dang’ => –
19023,
‘dao’ => –
19018,
‘de’ => –
19006,
‘deng’ => –
19003,
‘di’ => –
18<a href=
“http://www.11px.cn/tags/996/” target=
“_blank”>
996</a>,
‘dian’ => –
18977,
‘diao’ => –
18961,
‘die’ => –
18952,
‘ding’ => –
18783,
‘diu’ => –
18774,
‘dong’ => –
18773,
‘dou’ => –
18763,
‘du’ => –
18756,
‘duan’ => –
18741,
‘dui’ => –
18735,
‘dun’ => –
18731,
‘duo’ => –
18722,

               
‘e’ => –
18710,
‘en’ => –
18697,
‘er’ => –
18696,

               
‘fa’ => –
18526,
‘fan’ => –
18518,
‘fang’ => –
18501,
‘fei’ => –
18490,
‘fen’ => –
18478,
‘feng’ => –
18463,
‘fo’ => –
18448,
‘fou’ => –
18447,
‘fu’ => –
18446,

               
‘ga’ => –
18239,
‘gai’ => –
18237,
‘gan’ => –
18231,
‘gang’ => –
18220,
‘gao’ => –
18211,
‘ge’ => –
18201,
‘gei’ => –
18184,
‘gen’ => –
18183,
‘geng’ => –
18181,
‘gong’ => –
18012,
‘gou’ => –
17997,
‘gu’ => –
17988,
‘gua’ => –
17970,
‘guai’ => –
17964,
‘guan’ => –
17961,
‘guang’ => –
17950,
‘gui’ => –
17947,

               
‘gun’ => –
17931,
‘guo’ => –
17928,

               
‘ha’ => –
17922,
‘hai’ => –
17759,
‘han’ => –
17752,
‘hang’ => –
17733,
‘hao’ => –
17730,
‘he’ => –
17721,
‘hei’ => –
17703,
‘hen’ => –
17701,
‘heng’ => –
17697,
‘hong’ => –
17692,
‘hou’ => –
17683,
‘hu’ => –
17676,
‘hua’ => –
17496,
‘huai’ => –
17487,
‘huan’ => –
17482,
‘huang’ => –
17468,
‘hui’ => –
17454,

               
‘hun’ => –
17433,
‘huo’ => –
17427,

               
‘ji’ => –
17417,
‘jia’ => –
17202,
‘jian’ => –
17185,
‘jiang’ => –
16983,
‘jiao’ => –
16970,
‘jie’ => –
16942,
‘jin’ => –
16915,
‘jing’ => –
16733,
‘jiong’ => –
16708,
‘jiu’ => –
16706,
‘ju’ => –
16689,
‘juan’ => –
16664,
‘jue’ => –
16657,
‘jun’ => –
16647,

               
‘ka’ => –
16474,
‘kai’ => –
16470,
‘kan’ => –
16465,
‘kang’ => –
16459,
‘kao’ => –
16452,
‘ke’ => –
16448,
‘ken’ => –
16433,
‘keng’ => –
16429,
‘kong’ => –
16427,
‘kou’ => –
16423,
‘ku’ => –
16419,
‘kua’ => –
16412,
‘kuai’ => –
16407,
‘kuan’ => –
16403,
‘kuang’ => –
16401,
‘kui’ => –
16393,
‘kun’ => –
16220,
‘kuo’ => –
16216,

               
‘la’ => –
16212,
‘lai’ => –
16205,
‘lan’ => –
16202,
‘lang’ => –
16187,
‘lao’ => –
16180,
‘le’ => –
16171,
‘lei’ => –
16169,
‘leng’ => –
16158,
‘li’ => –
16155,
‘lia’ => –
15959,
‘lian’ => –
15958,
‘liang’ => –
15944,
‘liao’ => –
15933,
‘lie’ => –
15920,
‘lin’ => –
15915,
‘ling’ => –
15903,
‘liu’ => –
15889,

               
‘long’ => –
15878,
‘lou’ => –
15707,
‘lu’ => –
15701,
‘lv’ => –
15681,
‘luan’ => –
15667,
‘lue’ => –
15661,
‘lun’ => –
15659,
‘luo’ => –
15652,

               
‘ma’ => –
15640,
‘mai’ => –
15631,
‘man’ => –
15625,
‘mang’ => –
15454,
‘mao’ => –
15448,
‘me’ => –
15436,
‘mei’ => –
15435,
‘men’ => –
15419,
‘meng’ => –
15416,
‘mi’ => –
15408,
‘mian’ => –
15394,
‘miao’ => –
15385,
‘mie’ => –
15377,
‘min’ => –
15375,
‘ming’ => –
15369,
‘miu’ => –
15363,
‘mo’ => –
15362,
‘mou’ => –
15183,
‘mu’ => –
15180,

               
‘na’ => –
15165,
‘nai’ => –
15158,
‘nan’ => –
15153,
‘nang’ => –
15150,
‘nao’ => –
15149,
‘ne’ => –
15144,
‘nei’ => –
15143,
‘nen’ => –
15141,
‘neng’ => –
15140,
‘ni’ => –
15139,
‘nian’ => –
15128,
‘niang’ => –
15121,
‘niao’ => –
15119,
‘nie’ => –
15117,
‘nin’ => –
15110,
‘ning’ => –
15109,
‘niu’ => –
14941,

               
‘nong’ => –
14937,
‘nu’ => –
14933,
‘nv’ => –
14930,
‘nuan’ => –
14929,
‘nue’ => –
14928,
‘nuo’ => –
14926,

               
‘o’ => –
14922,
‘ou’ => –
14921,

               
‘pa’ => –
14914,
‘pai’ => –
14908,
‘pan’ => –
14902,
‘pang’ => –
14894,
‘pao’ => –
14889,
‘pei’ => –
14882,
‘pen’ => –
14873,
‘peng’ => –
14871,
‘pi’ => –
14857,
‘pian’ => –
14678,
‘piao’ => –
14674,
‘pie’ => –
14670,
‘pin’ => –
14668,
‘ping’ => –
14663,
‘po’ => –
14654,
‘pu’ => –
14645,

               
‘qi’ => –
14630,
‘qia’ => –
14594,
‘qian’ => –
14429,
‘qiang’ => –
14407,
‘qiao’ => –
14399,
‘qie’ => –
14384,
‘qin’ => –
14379,
‘qing’ => –
14368,
‘qiong’ => –
14355,
‘qiu’ => –
14353,
‘qu’ => –
14345,
‘quan’ => –
14170,
‘que’ => –
14159,
‘qun’ => –
14151,

               
‘ran’ => –
14149,
‘rang’ => –
14145,
‘rao’ => –
14140,
‘re’ => –
14137,
‘ren’ => –
14135,
‘reng’ => –
14125,
‘ri’ => –
14123,
‘rong’ => –
14122,
‘rou’ => –
14112,
‘ru’ => –
14109,
‘ruan’ => –
14099,
‘rui’ => –
14097,
‘run’ => –
14094,
‘ruo’ => –
14092,

               
‘sa’ => –
14090,
‘sai’ => –
14087,
‘san’ => –
14083,
‘sang’ => –
13917,
‘sao’ => –
13914,
‘se’ => –
13910,
‘sen’ => –
13907,
‘seng’ => –
13906,
‘sha’ => –
13905,
‘shai’ => –
13896,
‘shan’ => –
13894,
‘shang’ => –
13878,
‘shao’ => –
13870,
‘she’ => –
13859,
‘shen’ => –
13847,
‘sheng’ => –
13831,
‘shi’ => –
13658,
‘shou’ => –
13611,
‘shu’ => –
1<a href=
“http://www.11px.cn/tags/360/” target=
“_blank”>
360</a>
1,
‘shua’ => –
13406,
‘shuai’ => –
13<a href=
“http://www.11px.cn/tags/404/” target=
“_blank”>
404</a>,
‘shuan’ => –
13400,
‘shuang’ => –
13398,
‘shui’ => –
13395,
‘shun’ => –
13391,
‘shuo’ => –
13387,
‘si’ => –
13383,
‘song’ => –
13367,
‘sou’ => –
13359,
‘su’ => –
13356,
‘suan’ => –
13343,
‘sui’ => –
13340,
‘sun’ => –
13329,
‘suo’ => –
13326,

               
‘ta’ => –
13318,
‘tai’ => –
13147,
‘tan’ => –
13138,
‘tang’ => –
13120,
‘tao’ => –
13107,
‘te’ => –
13096,
‘teng’ => –
13095,
‘ti’ => –
13091,
‘tian’ => –
13076,
‘tiao’ => –
13068,
‘tie’ => –
13063,
‘ting’ => –
13060,
‘tong’ => –
12888,
‘tou’ => –
12875,
‘tu’ => –
12871,
‘tuan’ => –
12860,
‘tui’ => –
12858,
‘tun’ => –
12852,
‘tuo’ => –
12849,

               
‘wa’ => –
12838,
‘wai’ => –
12831,
‘wan’ => –
12829,
‘wang’ => –
12812,
‘wei’ => –
12802,
‘wen’ => –
12607,
‘weng’ => –
12597,
‘wo’ => –
12594,
‘wu’ => –
12585,

               
‘xi’ => –
12556,
‘xia’ => –
12359,
‘xian’ => –
12346,
‘xiang’ => –
12320,
‘xiao’ => –
12300,
‘xie’ => –
12120,
‘xin’ => –
12099,
‘xing’ => –
12089,
‘xiong’ => –
12074,
‘xiu’ => –
12067,
‘xu’ => –
12058,
‘xuan’ => –
12039,
‘xue’ => –
11867,
‘xun’ => –
11861,

               
‘ya’ => –
11847,
‘yan’ => –
11831,
‘yang’ => –
11798,
‘yao’ => –
11781,
‘ye’ => –
11604,
‘yi’ => –
11589,
‘yin’ => –
11536,
‘ying’ => –
11358,
‘yo’ => –
11340,
‘yong’ => –
11339,
‘you’ => –
11324,
‘yu’ => –
11303,
‘yuan’ => –
11097,
‘yue’ => –
11077,
‘yun’ => –
11067,

               
‘za’ => –
11055,
‘zai’ => –
11052,
‘zan’ => –
11045,
‘zang’ => –
11041,
‘zao’ => –
11038,
‘ze’ => –
11024,
‘zei’ => –
11020,
‘zen’ => –
11019,
‘zeng’ => –
11018,
‘zha’ => –
11014,
‘zhai’ => –
10838,
‘zhan’ => –
10832,
‘zhang’ => –
10815,
‘zhao’ => –
10800,
‘zhe’ => –
10790,
‘zhen’ => –
10780,
‘zheng’ => –
10764,
‘zhi’ => –
10587,
‘zhong’ => –
10544,
‘zhou’ => –
10533,
‘zhu’ => –
10519,
‘zhua’ => –
10331,
‘zhuai’ => –
10329,
‘zhuan’ => –
10328,
‘zhuang’ => –
10322,
‘zhui’ => –
10315,
‘zhun’ => –
10309,
‘zhuo’ => –
10307,
‘zi’ => –
10296,
‘zong’ => –
10281,
‘zou’ => –
10274,
‘zu’ => –
10270,
‘zuan’ => –
10262,

               
‘zui’ => –
10260,
‘zun’ => –
10256,
‘zuo’ => –
10254

        );

       
/**
          * 获取全部拼音,返回拼音的数组,如 ‘张三丰’ ==> [‘zhang’,’san’,’feng’]
          * @param $chinese
          * @param string $charset
          * @return array
          */


       
public function get_all_py($chinese, $charset =
‘utf-8’)

        {

               
if ($charset !=
‘gb2312’) $chinese = $this->_U2_Utf8_Gb($chinese);

                $py = $this->zh_to_pys($chinese);

               
return $py;

        }

       
/**
          * 获取拼音首字母,如[‘zhang’,’san’,’feng’] ==> zsf
          * @param $all_pys
          * @return string
          */


       
public function get_first_py($all_pys)

        {

               
if (count($all_pys) <=
0) {

                       
return ;

                }

                $result = [];

                foreach ($all_pys as $one) {

                       
if (is_null($one) || strlen($one) <=
0) {

                               
continue;

                        }

                        $result[] = substr($one,
0,
1);

                }

               
return join(
, $result);

        }

       
/**
          * 获取拼音首字母,如[‘zhang’,’san’,’feng’] ==> z
          * @param $all_pys
          * @return string
          */


       
public function get_first_letter($all_pys)

        {

               
if (count($all_pys) <=
0) {

                       
return ;

                }

                foreach ($all_pys as $one) {

                       
if (is_null($one) || strlen($one) <=
0) {

                               
continue;

                        }

                       
return substr($one,
0,
1);

                }

               
return ;

        }

       
private function _U2_Utf8_Gb($_C)

        {

                $_String =
;

               
if ($_C <
0x80) $_String .= $_C;

                elseif ($_C <
0x800) {

                        $_String .= chr(
0xC0 | $_C >>
6);

                        $_String .= chr(
0x80 | $_C &
0x3F);

                } elseif ($_C <
0x10000) {

                        $_String .= chr(
0xE0 | $_C >>
12);

                        $_String .= chr(
0x80 | $_C >>
6 &
0x3F);

                        $_String .= chr(
0x80 | $_C &
0x3F);

                } elseif ($_C <
0x200000) {

                        $_String .= chr(
0xF0 | $_C >>
18);

                        $_String .= chr(
0x80 | $_C >>
12 &
0x3F);

                        $_String .= chr(
0x80 | $_C >>
6 &
0x3F);

                        $_String .= chr(
0x80 | $_C &
0x3F);

                }

               
return iconv(
‘UTF-8’,
‘GB2312’, $_String);

        }

       
private function zh_to_py($num, $blank =
)

        {

               
if ($num >
0 && $num <
160) {

                       
return chr($num);

                } elseif ($num < –
20319 || $num > –
10247) {

                       
return $blank;

                }
else {

                        foreach ($this->dict_list as $py => $code) {

                               
if ($code > $num)
break;

                                $result = $py;

                        }

                       
return $result;

                }

        }

       
private function zh_to_pys($chinese)

        {

                $result = array();

               
for ($i =
0; $i < strlen($chinese); $i++) {

                        $p = ord(substr($chinese, $i,
1));

                       
if ($p >
160) {

                                $q = ord(substr($chinese, ++$i,
1));

                                $p = $p *
256 + $q –
65536;

                        }

                        $result[] = $this->zh_to_py($p);

                }

               
return $result;

        }

}

 

这样就可以解决乱码的问题了!