乖兔博客

乖兔 > CMS系统 > PHP > PHP实现中文转拼音可选注音声调首字母大写

PHP实现中文转拼音可选注音声调首字母大写

乖兔 更新于: 2020-03-26 分类:PHP

PHP中文转拼音.jpg

前面写过一个PHP自动将汉字转为拼音和翻译成英文的例子,今天在分享一个PHP自动转拼音的例子,本例子还可以实现PHP汉字转拼音时候选择注音、首字母和首字母大写的效果。汉字库已经包含在了php代码内。不过因为汉字库文件内容太长,所以把他写到了一个记事本内,下载后插入到下面汉字库的位置就好。

点我下载汉字拼音库

<?php
 
namespace app\common\lib;
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2017/1/4
 * Time: 17:26
 */
class ChinesePinyin{
    //utf-8中国汉字集合
    private $ChineseCharacters;
    //编码
    private $charset = 'utf-8';
 
    public function __construct(){
        if( empty($this->ChineseCharacters) ){
            $this->ChineseCharacters = "汉字库写到这个位置";
           }
    }
 
    /*
    * 转成带有声调的汉语拼音
    * param $input_char String  需要转换的汉字
    * param $delimiter  String   转换之后拼音之间分隔符
    * param $outside_ignore  Boolean     是否忽略非汉字内容
    */
    public function TransformWithTone($input_char,$delimiter=' ',$outside_ignore=false){
 
        $input_len = iconv_strlen($input_char,$this->charset);
        $output_char = '';
        for($i=0;$i<$input_len;$i++){
            $word = iconv_substr($input_char,$i,1,$this->charset);
            if(preg_match('/^[\x{4e00}-\x{9fa5}]$/u',$word) && preg_match('/\,'.preg_quote($word).'(.*?)\,/',$this->ChineseCharacters,$matches) ){
                $output_char.=$matches[1].$delimiter;
            }else if(!$outside_ignore){
                $output_char.=$word.$delimiter;
            }
        }
 
        return $output_char;
    }
    /*
    * 转成带无声调的汉语拼音
    * param $input_char String  需要转换的汉字
    * param $delimiter  String   转换之后拼音之间分隔符
    * param $outside_ignore  Boolean     是否忽略非汉字内容
    */
    public function TransformWithoutTone($input_char,$delimiter='',$outside_ignore=false){
 
        $char_with_tone = $this->TransformWithTone($input_char,$delimiter,$outside_ignore);
 
        $char_without_tone  =  str_replace(array('ā','á','ǎ','à','ō','ó','ǒ','ò','ē','é','ě','è','ī','í','ǐ','ì','ū','ú','ǔ','ù','ǖ','ǘ','ǚ','ǜ','ü'),
            array('a','a','a','a','o','o','o','o','e','e','e','e','i','i','i','i','u','u','u','u','v','v','v','v','v')
            ,$char_with_tone );
        return $char_without_tone;
 
    }
    /*
    * 转成汉语拼音首字母
    * param $input_char String  需要转换的汉字
    * param $delimiter  String   转换之后拼音之间分隔符
    *  param $outside_ignore  Boolean     是否忽略非汉字内容
    */
    public function TransformUcwords($input_char,$delimiter='',$outside_ignore=true){
        $str='';
        $len=iconv_strlen($input_char,$this->charset);
        for ($i=0;$i<$len;$i++){
            $word = iconv_substr($input_char,$i,1,$this->charset);
            if (preg_match('/^[\x{4e00}-\x{9fa5}]$/u',$word)){
                $char_without_tone = ucwords($this->TransformWithoutTone($word,' ',$outside_ignore));
                $ucwords = preg_replace('/[^A-Z]/','',$char_without_tone);
                if(!empty($delimiter)){
                    $ucwords = implode($delimiter,str_split($ucwords));
                }
                $str .=$delimiter.$ucwords;
            }else if(!$outside_ignore){
                $str.=$delimiter.$word;
            }
        }
        return $str;
    }
}
 
$Pinyin=new ChinesePinyin();
$words='东莞';
echo '<p>转成带有声调的汉语拼音<br/>';
$result = $Pinyin->TransformWithTone($words);
echo $result,'</p>';
echo '<p>转成带无声调的汉语拼音<br/>';
$result = $Pinyin->TransformWithoutTone($words,' ');
echo($result),'</p>';
echo '<p>转成汉语拼音首字母<br/>';
$result = $Pinyin->TransformUcwords($words);
echo($result),'</p>';
?>


打赏