PHP把中文转换成拼音的方法
在PHP中,有时候需要把中文转换成拼音,实现起来很简单,只需要加载一个一个拼音类,然后执行方法就可以。
取每个汉字的首字母:
$class = new Pinyin(); $pinyin = $class->str2py('需要转换的汉字');
取全部汉字的字母:
$class = new Pinyin(); $pinyin = $class->str2pys('需要转换的汉字');
pinyin类:
class Pinyin { protected $pinyin = array( "A"=>array(59371,41648,50400,33157,41392,18661,47599), //篇幅有限,省略其中大段数据 "Zuo"=>array(61932,53739,33225,18050,25788,31432,63191,35536,63959,63703,27065,38882,39606,32182,62167,62423,62679,62860,59610,63447,38591,63116) ); /** * 汉字转拼音函数(取每个汉字的首字母) * @param string $string * @return string */ public function str2py($string) { $string = preg_replace("/\s/is", "_", $string); $string = preg_replace("/(|\~|\_|\`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\-|\+|\=|\{|\}|\[|\]|\||\\|\:|\;|\"|\'|\<|\,|\>|\.|\?|\/)/is", "", $string); $py = ""; $string = iconv('UTF-8', 'GBK', $string); for ($i = 0; $i < strlen($string); $i++) { if (ord($string[$i]) > 128) { $char = $this->asi2py(ord($string[$i]) + ord($string[$i + 1]) * 256); $py .= $char[0]; //取拼音的第一个字符 // break; $i++; } else { $py .= $string[$i]; } } return strtolower($py); } /** * 汉字转拼音函数(取每个汉字的全部字母) * @param string $string * @return string */ public function str2pys($string) { $string = preg_replace("/\s/is", "_", $string); $string = preg_replace("/(|\~|\_|\`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\-|\+|\=|\{|\}|\[|\]|\||\\|\:|\;|\"|\'|\<|\,|\>|\.|\?|\/)/is", "", $string); $py = ""; $string = iconv('UTF-8', 'GBK', $string); for ($i = 0; $i < strlen($string); $i++) { if (ord($string[$i]) > 128) { $char = $this->asi2py(ord($string[$i]) + ord($string[$i + 1]) * 256); $py .= $char.' '; //取拼音的全部字符 $i++; } else { $py .= $string[$i].' '; } } return strtolower($py); } public function asi2py($a) { $py = $this->pinyin; foreach ($py as $p) { if (array_search($a, $p) === false) { } else { return key($py); } next($py); } } }
获取到的拼音是没有声调的,只有字母。不过在一般开发过程中就够用了,执行方法后出来的字母默认是全部小写并连在一起,如“woaizhongguo”,可以举一反三,多写几个方法,让拼音有间隔,如“wo ai zhong guo”,或者拼音首字母大写,如“WoAiZhongGuo”,等等。
标签:php