前面文章有提到php获取中文拼音的解决方案,文章链接如下
该方法的优势在于速度够快,不依赖于任何第三方库。但不支持多音字以及音标的获取,现在将借助第三方库解决这个问题
上一篇地址
php获取中文拼音(含生僻字)支持首字母,全拼
引入第三方库
本文范例采用 composer
composer require "overtrue/pinyin:~3.0"
你也可以直接下载
下载 php pinyin
引入(根据资源获取路径选择)
composer 方式
use Overtrue\Pinyin\Pinyin;
require_once 方式
require_once 'PinYin/PinYin.class.php';
核心代码(composer 方式)
/*** 中文转拼音-支持多音字-音标* @param string $str utf8字符串* @param string $ret_format 返回格式 [all:全拼音|first:首字母]* @param string $space 字符间隔* @param string $tone 是否获取音标* @return string 拼音字符串*/function pinyinMultitone($str, $ret_format = 'all', $space = " ",$tone = false){//不提前载入,字典文件在使用时已文件流形式打开并逐行遍历,运用 yield 特性分配内存,对于内存的消耗非常微小,但转换较慢//$pinyin = new Pinyin('Overtrue\Pinyin\GeneratorFileDictLoader');//将字典预先载入内存-优点是比较快-适用于内存相对充足的服务器$pinyin = new Pinyin('Overtrue\Pinyin\MemoryFileDictLoader');//以上两种二选一if($tone == true){$pinyin = $pinyin->convert($str,PINYIN_UNICODE);}else{$pinyin = $pinyin->convert($str);}$rs = "";foreach($pinyin as $value){if($ret_format == "first"){$chr = mb_substr($value, 0, 1);$rs.=$chr.$space;}else{$rs .= $value.$space;}}return rtrim($rs, ' ');}
核心代码(require_once 方式)
require_once 'PinYin/PinYin.class.php';echo join(' ', PinYin::toPinyin('带着希望旅行,')); # dai zhuo xi wang lv xing ,echo PHP_EOL;echo join(' ', PinYin::toPinyin('重庆', true)); # chóng qìng
在线演示工具网址