php 获取 拼音,php获取汉字拼音(一)

通过GBK编码表获取汉字的拼音,处理短文本更快。

附件:py.dic<?php

class PinYin {

public $pinyin = array();

/**

* 初始化GBK码表对应值

*/

public function __construct(){

// py.dic格式化后的数组

$this -> pinyin = $pinyin_dictory;

}

/**

* 输入字符串,以及要返回的数据形态

* @param type $s 字符串原值

* @param type $first 只要为真返回汉字首字母

* @return type

*/

public function str2py($s, $first = false)

{

//空格的默认转换字符

$s = preg_replace("/\s/is", "_", $s);

//过滤掉所有的非法字符;~,`,!,@#$%^&*()-=+{}[]|\:;"'<>.?/

$s = preg_replace("/(|\~|\`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\-|\+|\=|\{|\}|\[|\]|\||\\|\:|\;|\"|\'|\|\.|\?|\/)/is", "", $s);

//初始化

$py = array();

// 加入这一句,自动识别utf-8

if(strlen("拼音") > 4)

{

$s = iconv('utf-8', 'gbk', $s);//强制转换为GBK编码

}

//循环处理

for ($i = 0;$i < strlen($s);$i++){

if (ord($s[$i]) > 128){

$py[] = $this -> asi2py(ord($s[$i]) +

(ord($s[$i + 1]) << 8), $first);

$i++;

} else {

//处理小写a元素和大写A元素

if ($s[$i] == 'a' || $s[$i] == 'A') {

$py[] = $s[$i].'*';

} else {

$py[] = $s[$i];

}

}

}

//返回结果

return $py;

}

/**

* 查找汉字对应的拼音

* @param type $a

* @param type $first

* @return type

*/

public function asi2py($a, $first)

{

$py = $this -> pinyin;

foreach ($py as $k => $p){

if (array_search($a, $p) === false){

} else{

if ($first) {

return substr(key($py), 0, 1);

}

return key($py);

}

next($py);

}

}

/**

* 根据汉字获取汉字全拼

* @param type $string

* @return type

*/

public function getQp($string)

{

return join($this->str2py($string),'');

}

/**

*

* @param type $string

* @return 根据汉字获获取简拼(汉字首字母)

*/

public function getJp($string)

{

return join($this->str2py($string,1), '');

}

/**

* 根据汉字获取汉字简拼 同时为每个汉字设置分割符号

* @param type $string

* @return type

*/

public function getJpDelimiter($string, $delimiter)

{

$jp = $this->str2py($string,1);

$t1 = "";

foreach($jp as $k => $v) {

if (is_numeric($v)) {

if ($t1) {

$jp[$t1] .= $v;

unset($jp[$k]);

} else {

$t1 = $k;

}

} else {

$t1 = "";

}

}

return join($jp,$delimiter);

}

/**

* 根据汉字获取汉字全拼 同时为每个汉字设置分割符号

* @param type $string

* @return type

*/

public function getQpDelimiter($string, $delimiter)

{

$qp = $this->str2py($string);

$t1 = $t2 = "";

foreach($qp as $k => $v) {

if (is_numeric($v)) {

if ($t1) {

$qp[$t1] .= $v;

unset($qp[$k]);

} else {

$t1 = $k;

}

}

else if($this->checkPy($v)) {

if($v == 'a*'){

$qp[$k] = $v = 'a';

} else if($v == 'A*') {

$qp[$k] = $v = 'A';

}

if ($t2) {

$qp[$t2] .= $v;

unset($qp[$k]);

} else {

$t2 = $k;

}

} else {

$t1 = "";

$t2 = "";

}

}

return join($qp, $delimiter);

}

public function checkPy($py)

{

if ($py == 'a') {

return false;

}

else if ($py == 'a*' || $py == 'A*' || strlen($py) == 1) {

return true;

} else {

return false;

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值