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
分类:编程笔记 时间:2021年04月03日 浏览:306