转成带有声调的汉语拼音
';
* $result = $Pinyin->TransformWithTone($words);
* echo $result,'
';
* echo '转成带无声调的汉语拼音
';
* $result = $Pinyin->TransformWithoutTone($words,' ');
* echo($result),'
';
* echo '转成汉语拼音首字母
';
* $result = $Pinyin->TransformUcwords($words);
* echo($result),'
';
*/
namespace pinyin;
class ChinesePinyin
{
//utf-8中国汉字集合
private $ChineseCharacters;
//编码
private $charset = 'utf-8';
public function __construct()
{
if (empty($this->ChineseCharacters)) {
$this->ChineseCharacters = file_get_contents(dirname(__FILE__) . '/dat/ChineseCharacters.dat');
}
}
/*
* 转成带有声调的汉语拼音
* param $input_char String 需要转换的汉字
* param $delimiter String 转换之后拼音之间分隔符
* param $outside_ignore Boolean 是否忽略非汉字内容
*/
public function TransformWithTone($input_char, $delimiter = ' ', $outside_ignore = false)
{
$input_len = mb_strlen($input_char, $this->charset);
$output_char = '';
for ($i = 0; $i < $input_len; $i++) {
$word = mb_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;
}
}
return $output_char;
}
/*
* 转成带无声调的汉语拼音
* param $input_char String 需要转换的汉字
* param $delimiter String 转换之后拼音之间分隔符
* param $outside_ignore Boolean 是否忽略非汉字内容
*/
public function TransformWithoutTone($input_char, $delimiter = '', $outside_ignore = true)
{
$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 转换之后拼音之间分隔符
*/
public function TransformUcwords($input_char, $delimiter = '')
{
$char_without_tone = ucwords($this->TransformWithoutTone($input_char, ' ', true));
$ucwords = preg_replace('/[^A-Z]/', '', $char_without_tone);
if (!empty($delimiter)) {
$ucwords = implode($delimiter, str_split($ucwords));
}
return $ucwords;
}
}