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