为了做数据库的拼音关键字搜素想起了 把产品名称生成拼音做为关键字存入数据库,于是上网搜集资料整了个这么个东西

/**

* 中文拼音转换类

* @author julian.song

* 部分代码来源与互联网,版权归原作者所有

*/

class Pinyin{

public function __construct()

{

}

/**

* 把字符串转换为拼音

* @param $string ASCII码

* @param $charset 编码

*/

public function getPinyin($string, $charset='gb2312')

{

$dataKey = "a|ai|an|ang|ao|ba|bai|ban|bang|bao|bei|ben|beng|bi|bian|biao|bie|bin|bing|bo|bu|ca|cai|can|cang|cao|ce|ceng|cha".

"|chai|chan|chang|chao|che|chen|cheng|chi|chong|chou|chu|chuai|chuan|chuang|chui|chun|chuo|ci|cong|cou|cu|".

"cuan|cui|cun|cuo|da|dai|dan|dang|dao|de|deng|di|dian|diao|die|ding|diu|dong|dou|du|duan|dui|dun|duo|e|en|er".

"|fa|fan|fang|fei|fen|feng|fo|fou|fu|ga|gai|gan|gang|gao|ge|gei|gen|geng|gong|gou|gu|gua|guai|guan|guang|gui".

"|gun|guo|ha|hai|han|hang|hao|he|hei|hen|heng|hong|hou|hu|hua|huai|huan|huang|hui|hun|huo|ji|jia|jian|jiang".

"|jiao|jie|jin|jing|jiong|jiu|ju|juan|jue|jun|ka|kai|kan|kang|kao|ke|ken|keng|kong|kou|ku|kua|kuai|kuan|kuang".

"|kui|kun|kuo|la|lai|lan|lang|lao|le|lei|leng|li|lia|lian|liang|liao|lie|lin|ling|liu|long|lou|lu|lv|luan|lue".

"|lun|luo|ma|mai|man|mang|mao|me|mei|men|meng|mi|mian|miao|mie|min|ming|miu|mo|mou|mu|na|nai|nan|nang|nao|ne".

"|nei|nen|neng|ni|nian|niang|niao|nie|nin|ning|niu|nong|nu|nv|nuan|nue|nuo|o|ou|pa|pai|pan|pang|pao|pei|pen".

"|peng|pi|pian|piao|pie|pin|ping|po|pu|qi|qia|qian|qiang|qiao|qie|qin|qing|qiong|qiu|qu|quan|que|qun|ran|rang".

"|rao|re|ren|reng|ri|rong|rou|ru|ruan|rui|run|ruo|sa|sai|san|sang|sao|se|sen|seng|sha|shai|shan|shang|shao|".

"she|shen|sheng|shi|shou|shu|shua|shuai|shuan|shuang|shui|shun|shuo|si|song|sou|su|suan|sui|sun|suo|ta|tai|".

"tan|tang|tao|te|teng|ti|tian|tiao|tie|ting|tong|tou|tu|tuan|tui|tun|tuo|wa|wai|wan|wang|wei|wen|weng|wo|wu".

"|xi|xia|xian|xiang|xiao|xie|xin|xing|xiong|xiu|xu|xuan|xue|xun|ya|yan|yang|yao|ye|yi|yin|ying|yo|yong|you".

"|yu|yuan|yue|yun|za|zai|zan|zang|zao|ze|zei|zen|zeng|zha|zhai|zhan|zhang|zhao|zhe|zhen|zheng|zhi|zhong|".

"zhou|zhu|zhua|zhuai|zhuan|zhuang|zhui|zhun|zhuo|zi|zong|zou|zu|zuan|zui|zun|zuo";

$dataValue = "-20319|-20317|-20304|-20295|-20292|-20283|-20265|-20257|-20242|-20230|-20051|-20036|-20032|-20026|-20002|-19990".

"|-19986|-19982|-19976|-19805|-19784|-19775|-19774|-19763|-19756|-19751|-19746|-19741|-19739|-19728|-19725".

"|-19715|-19540|-19531|-19525|-19515|-19500|-19484|-19479|-19467|-19289|-19288|-19281|-19275|-19270|-19263".

"|-19261|-19249|-19243|-19242|-19238|-19235|-19227|-19224|-19218|-19212|-19038|-19023|-19018|-19006|-19003".

"|-18996|-18977|-18961|-18952|-18783|-18774|-18773|-18763|-18756|-18741|-18735|-18731|-18722|-18710|-18697".

"|-18696|-18526|-18518|-18501|-18490|-18478|-18463|-18448|-18447|-18446|-18239|-18237|-18231|-18220|-18211".

"|-18201|-18184|-18183|-18181|-18012|-17997|-17988|-17970|-17964|-17961|-17950|-17947|-17931|-17928|-17922".

"|-17759|-17752|-17733|-17730|-17721|-17703|-17701|-17697|-17692|-17683|-17676|-17496|-17487|-17482|-17468".

"|-17454|-17433|-17427|-17417|-17202|-17185|-16983|-16970|-16942|-16915|-16733|-16708|-16706|-16689|-16664".

"|-16657|-16647|-16474|-16470|-16465|-16459|-16452|-16448|-16433|-16429|-16427|-16423|-16419|-16412|-16407".

"|-16403|-16401|-16393|-16220|-16216|-16212|-16205|-16202|-16187|-16180|-16171|-16169|-16158|-16155|-15959".

"|-15958|-15944|-15933|-15920|-15915|-15903|-15889|-15878|-15707|-15701|-15681|-15667|-15661|-15659|-15652".

"|-15640|-15631|-15625|-15454|-15448|-15436|-15435|-15419|-15416|-15408|-15394|-15385|-15377|-15375|-15369".

"|-15363|-15362|-15183|-15180|-15165|-15158|-15153|-15150|-15149|-15144|-15143|-15141|-15140|-15139|-15128".

"|-15121|-15119|-15117|-15110|-15109|-14941|-14937|-14933|-14930|-14929|-14928|-14926|-14922|-14921|-14914".

"|-14908|-14902|-14894|-14889|-14882|-14873|-14871|-14857|-14678|-14674|-14670|-14668|-14663|-14654|-14645".

"|-14630|-14594|-14429|-14407|-14399|-14384|-14379|-14368|-14355|-14353|-14345|-14170|-14159|-14151|-14149".

"|-14145|-14140|-14137|-14135|-14125|-14123|-14122|-14112|-14109|-14099|-14097|-14094|-14092|-14090|-14087".

"|-14083|-13917|-13914|-13910|-13907|-13906|-13905|-13896|-13894|-13878|-13870|-13859|-13847|-13831|-13658".

"|-13611|-13601|-13406|-13404|-13400|-13398|-13395|-13391|-13387|-13383|-13367|-13359|-13356|-13343|-13340".

"|-13329|-13326|-13318|-13147|-13138|-13120|-13107|-13096|-13095|-13091|-13076|-13068|-13063|-13060|-12888".

"|-12875|-12871|-12860|-12858|-12852|-12849|-12838|-12831|-12829|-12812|-12802|-12607|-12597|-12594|-12585".

"|-12556|-12359|-12346|-12320|-12300|-12120|-12099|-12089|-12074|-12067|-12058|-12039|-11867|-11861|-11847".

"|-11831|-11798|-11781|-11604|-11589|-11536|-11358|-11340|-11339|-11324|-11303|-11097|-11077|-11067|-11055".

"|-11052|-11045|-11041|-11038|-11024|-11020|-11019|-11018|-11014|-10838|-10832|-10815|-10800|-10790|-10780".

"|-10764|-10587|-10544|-10533|-10519|-10331|-10329|-10328|-10322|-10315|-10309|-10307|-10296|-10281|-10274".

"|-10270|-10262|-10260|-10256|-10254";

$tDataKey = explode('|', $dataKey);

$tDataValue = explode('|', $dataValue);

$data = (PHP_VERSION>='5.0') ? array_combine($tDataKey, $tDataValue) : $this->arrayCombine($tDataKey, $tDataValue);

arsort($data);

reset($data);

if($charset != 'gb2312') $string = $this->utf82GB2312($string);

$res = '';

for($i=0; $i{

$asc = ord(substr($string, $i, 1));

if($asc>160) { $q = ord(substr($string, ++$i, 1)); $asc = $asc*256 + $q - 65536; }

$res .= $this->asc2Pinyin($asc, $data);

}

return preg_replace("/[^a-z0-9]*/", '', $res);

}

/**

* 把ASCII码转换为对应的拼音

* @param $asc ASCII码

* @param $data ASCII码拼音字符对照表

*/

public function asc2Pinyin($asc, $data)

{

if ($asc>0 && $asc<160 ) return chr($asc);

elseif($asc-10247) return '';

else {

foreach($data as $k=>$v){ if($v<=$asc) break; }

return $k;

}

}

/**

* 将UFT8字符的编码转化为GB2312

* @param $char

*/

public function utf82GB2312($char)

{

$string = '';

if($char < 0x80) $string .= $char;

elseif($char < 0x800)

{

$string .= chr(0xC0 | $char>>6);

$string .= chr(0x80 | $char & 0x3F);

}elseif($char < 0x10000){

$string .= chr(0xE0 | $char>>12);

$string .= chr(0x80 | $char>>6 & 0x3F);

$string .= chr(0x80 | $char & 0x3F);

} elseif($char < 0x200000) {

$string .= chr(0xF0 | $char>>18);

$string .= chr(0x80 | $char>>12 & 0x3F);

$string .= chr(0x80 | $char>>6 & 0x3F);

$string .= chr(0x80 | $char & 0x3F);

}

return iconv('UTF-8', 'GB2312//IGNORE', $string);

}

/**

* 比较数组

* @param $arr1 数组1

* @param $arr2 数组2

*/

public function arrayCombine($arr1, $arr2)

{

for($i=0; $ireturn $res;

}

/**

*获得汉字的拼音首字母

* @param $str 字符串

*/

public function getInitial($str,$charset) {

if($charset=="UTF-8")$str=$this->utf82GB2312($str);

$asc = ord(substr($str, 0, 1));

if ($asc < 160) {//非中文

if ($asc >= 48 && $asc <= 57) {

return chr($asc); //数字

} elseif ($asc >= 65 && $asc <= 90) {

return chr($asc); // A--Z

} elseif ($asc >= 97 && $asc <= 122) {

return chr($asc - 32); // a--z

} else {

return '-'; //其他

}

} else {//中文

$asc = $asc * 1000 + ord(substr($str, 1, 1));

//获取拼音首字母A--Z

if ($asc >= 176161 && $asc < 176197) {

return 'A';

} elseif ($asc >= 176197 && $asc < 178193) {

return 'B';

} elseif ($asc >= 178193 && $asc < 180238) {

return 'C';

} elseif ($asc >= 180238 && $asc < 182234) {

return 'D';

} elseif ($asc >= 182234 && $asc < 183162) {

return 'E';

} elseif ($asc >= 183162 && $asc < 184193) {

return 'F';

} elseif ($asc >= 184193 && $asc < 185254) {

return 'G';

} elseif ($asc >= 185254 && $asc < 187247) {

return 'H';

} elseif ($asc >= 187247 && $asc < 191166) {

return 'J';

} elseif ($asc >= 191166 && $asc < 192172) {

return 'K';

} elseif ($asc >= 192172 && $asc < 194232) {

return 'L';

} elseif ($asc >= 194232 && $asc < 196195) {

return 'M';

} elseif ($asc >= 196195 && $asc < 197182) {

return 'N';

} elseif ($asc >= 197182 && $asc < 197190) {

return 'O';

} elseif ($asc >= 197190 && $asc < 198218) {

return 'P';

} elseif ($asc >= 198218 && $asc < 200187) {

return 'Q';

} elseif ($asc >= 200187 && $asc < 200246) {

return 'R';

} elseif ($asc >= 200246 && $asc < 203250) {

return 'S';

} elseif ($asc >= 203250 && $asc < 205218) {

return 'T';

} elseif ($asc >= 205218 && $asc < 206244) {

return 'W';

} elseif ($asc >= 206244 && $asc < 209185) {

return 'X';

} elseif ($asc >= 209185 && $asc < 212209) {

return 'Y';

} elseif ($asc >= 212209) {

return 'Z';

} else {

return '-';

}

}

}

/**

* 拆分字符串为数组

* @param $str 字符串

* @param $charset 编码

*/

public function mbStringtoArray($str,$charset) {

$strlen=mb_strlen($str);

while($strlen){

$array[]=mb_substr($str,0,1,$charset);

$str=mb_substr($str,1,$strlen,$charset);

$strlen=mb_strlen($str);

}

return $array;

}

public function getInitials($str,$charset){

$initials="";

foreach($this->mbStringtoArray($str,$charset)as $char){

$initials.=$this->getInitial($char,$charset);

}

return $initials;

}

}

本文出自 “大白良” 博客

php字符串转拼音,php程序如何把中文字符转换为拼音相关推荐

  1. php中文拼音模糊,两种php中文字符转拼音问题解决方法

    最近在做二次开发的时候,碰到了将数据库中存储的某个字段的值(该值为中文字符串)分别归类到相应字母下的问题,如:"博客"归类到B中. 解决该问题的思路为:      1.读取改字段的 ...

  2. java中文字符转换,Java中文字符转换拼音

    将传入的任意中文字符转换为拼音 (1)多音字只取其中一个读音. (2)生僻字如果没有拼音,使用unknown替代. package com.amgotech; public class Chinese ...

  3. vba 全拼_[求助]如何把中文名字转换为拼音(全拼、首字母)

    你的位置: 问答吧 -> excel -> 问题详情 [求助]如何把中文名字转换为拼音(全拼.首字母) 现需要把中文名字的拼音做企业邮箱的名字,姓用全拼,名用首字母,比如刘翔为liux,应 ...

  4. PHP将中文字符转为拼音/首字母大写/或其他连接符

    PHP将中文字符转为拼音/首字母大写/或其他连接符 项目中遇到需要将客户的姓名转为首拼并且大写的要求, 提出解决办法 首先建立一个汉字转拼音的类 class PinYin {private $pyli ...

  5. JAVA 中文字符转为拼音字符串

    项目上偶尔要用到关于中文字符串转换为拼音字符串的功能,pinyin4j.jar这个包可以提供相关的功能,非常方便,首先要在maven中pom.xml添加依赖项,如果不用maven,那直接下载对应的ja ...

  6. Pinyin4j中文字符和拼音之间的转换

    主要功能点 中文转化为拼音码 获得中文首字母 package com.yhy.springcloud.predicate;import net.sourceforge.pinyin4j.PinyinH ...

  7. 网页自动加拼音html,javascript实现输入中文自动生成拼音

    需求:输入中文,输入框失去焦点后自动生成全写拼音及简写拼音. 分享一款轻量级JS插件:Convert_Pinyin.js(文末可以下载). 只需引入一个JS文件,然后调用对象里在JS方法函数即可,演示 ...

  8. mysql转拼音首字母大写_Mysql中文汉字转拼音的实现  mysql首字母转化为大写

    这篇文章主要介绍了Mysql中文汉字转拼音的实现,并且每个汉字会转换全拼,使用Mysql自定义函数实现,需要的朋友可以参考下 第一步:我们将在mysql中新建必要的函数 一.创建拼音对照表 -- 创建 ...

  9. java定义整形输出_java程序命令行接受字符转换为整形并相加输出

    1.设计思想 主要是根据老师发的JavaAppArguments源代码自己体会连领悟这种程序的特点,自己在加以创新和改造,首先大概地框架是一样的,用一个局部的for循环体将命令行的每个值赋给arg,在 ...

  10. java 字符串 ansi转utf8_在Java中将ANSI字符转换为UTF-8

    有没有办法使用 Java将ANSI字符串转换为UTF. 我有一个使用readUTF& amp;的定制串行器. DataInputStream类的writeUTF方法用于反序列化和序列化字符串. ...

最新文章

  1. Openshift创建Router和Registry
  2. CubieBoard 简单入门
  3. php worker类,Workerman进阶之Worker类-id属性研究
  4. 在项目中常用到的几个注解@JsonInclude、@JsonFormat、@DateTimeFormat
  5. JSF 2,PrimeFaces 3,Spring 3和Hibernate 4集成项目
  6. 有限自动机与有限状态机
  7. 为什么jQuery或诸如getElementById之类的DOM方法找不到元素?
  8. python查看我国1990-2015年间的温度变化情况
  9. 计算机二级通关宝典-C语言篇
  10. 题目 1842: 对局匹配
  11. fpga驱动步进电机转动指定角度_通过PLC实现步进电机定位控制的方法
  12. Linux 进程查看命令 ps top htop dstat
  13. DFS:寻路问题(Roads)
  14. 对样例SoC集成example salve模块
  15. 关于怎样突破一个个微信投一票及人工刷票微信号推荐的方法和教程
  16. 搭建ftp文件服务器
  17. excel 您输入的公式存在错误。如果您输入的内容不是公式,请在第一个字符之前输入单引号(‘)
  18. 如何在ORACLE数据库的字段上建立索引?
  19. 缺省值和null值的区别和作用
  20. 大学计算机打算及目的,大学生计算机实习目的和要求

热门文章

  1. 为什么学习计算机的时候学语文,小学语文“为什么要学拼音呢”?告诉你学拼音技巧!...
  2. Latex中的括号用法总结
  3. PyConChina 2019 深圳站之行
  4. NeurIPS2020 Generalized Focal Loss论文翻译
  5. 五种常用的绩效考核工具对比
  6. 英文地址的翻译注意事项
  7. 《菜鸟教程》C语言学习
  8. python小课风变编程_风变编程Python小课最近很火,大家学完感受如何?
  9. 风变python多少钱_请问风变编程Python值得购买吗?
  10. 如何制作U盘启动盘并且安装系统(保姆级教学)