php 转换带声调的字幕,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

$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

$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 '

转成带有声调的汉语拼音
';

$result = $Pinyin->TransformWithTone($words);

echo $result,'

';

echo '

转成带无声调的汉语拼音
';

$result = $Pinyin->TransformWithoutTone($words,' ');

echo($result),'

';

echo '

转成汉语拼音首字母
';

$result = $Pinyin->TransformUcwords($words);

echo($result),'

';

?>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值