逍遥一派 发表于 2015-2-3 23:30:40

PHP网页编程之PHP汉字转换拼音的类

我先把我自己学习PHP的过程做一下概括:   
收集上相似的代码大多只能在gb2312编码下利用,上面这个类同时能在utf-8编码下将汉字转换为拼音,详细的代码和用法以下:<?php function Pinyin($_String, $_Code='gb2312') { $_DataKey = "aaianangaobabaibanbangbaobeibenbengbibianbiaobiebinbingbobucacaicancangcaocecengcha". "chaichanchangchaochechenchengchichongchouchuchuaichuanchuangchuichunchuocicongcoucu". "cuancuicuncuodadaidandangdaodedengdidiandiaodiedingdiudongdoududuanduidunduoeener". "fafanfangfeifenfengfofoufugagaiganganggaogegeigengenggonggouguguaguaiguanguanggui". "gunguohahaihanhanghaoheheihenhenghonghouhuhuahuaihuanhuanghuihunhuojijiajianjiang". "jiaojiejinjingjiongjiujujuanjuejunkakaikankangkaokekenkengkongkoukukuakuaikuankuang". "kuikunkuolalailanlanglaoleleilenglilialianliangliaolielinlingliulongloululvluanlue". "lunluomamaimanmangmaomemeimenmengmimianmiaomieminmingmiumomoumunanainannangnaone". "neinennengninianniangniaonieninningniunongnunvnuannuenuoooupapaipanpangpaopeipen". "pengpipianpiaopiepinpingpopuqiqiaqianqiangqiaoqieqinqingqiongqiuququanquequnranrang". "raorerenrengrirongroururuanruirunruosasaisansangsaosesensengshashaishanshangshao". "sheshenshengshishoushushuashuaishuanshuangshuishunshuosisongsoususuansuisunsuotatai". "tantangtaotetengtitiantiaotietingtongtoututuantuituntuowawaiwanwangweiwenwengwowu". "xixiaxianxiangxiaoxiexinxingxiongxiuxuxuanxuexunyayanyangyaoyeyiyinyingyoyongyou". "yuyuanyueyunzazaizanzangzaozezeizenzengzhazhaizhanzhangzhaozhezhenzhengzhizhong". "zhouzhuzhuazhuaizhuanzhuangzhuizhunzhuozizongzouzuzuanzuizunzuo"; $_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) : _Array_Combine($_TDataKey, $_TDataValue); arsort($_Data); reset($_Data); if($_Code != 'gb2312') $_String = _U2_Utf8_Gb($_String); $_Res = ''; for($i=0; $i<strlen($_String); $i++) { $_P = ord(substr($_String, $i, 1)); if($_P>160) { $_Q = ord(substr($_String, ++$i, 1)); $_P = $_P*256 + $_Q - 65536; } $_Res .= _Pinyin($_P, $_Data); } return preg_replace("/[^a-z0-9]*/", '', $_Res); } function _Pinyin($_Num, $_Data) { if ($_Num>0 && $_Num<160 ) return chr($_Num); elseif($_Num<-20319 $_Num>-10247) return ''; else { foreach($_Data as $k=>$v){ if($v<=$_Num) break; } return $k; } } function _U2_Utf8_Gb($_C) { $_String = ''; if($_C < 0x80) $_String .= $_C; elseif($_C < 0x800) { $_String .= chr(0xC0 $_C>>6); $_String .= chr(0x80 $_C & 0x3F); }elseif($_C < 0x10000){ $_String .= chr(0xE0 $_C>>12); $_String .= chr(0x80 $_C>>6 & 0x3F); $_String .= chr(0x80 $_C & 0x3F); } elseif($_C < 0x200000) { $_String .= chr(0xF0 $_C>>18); $_String .= chr(0x80 $_C>>12 & 0x3F); $_String .= chr(0x80 $_C>>6 & 0x3F); $_String .= chr(0x80 $_C & 0x3F); } return iconv('UTF-8', 'GB2312', $_String); } function _Array_Combine($_Arr1, $_Arr2) { for($i=0; $i<count($_Arr1); $i++) $_Res[$_Arr1[$i]] = $_Arr2[$i]; return $_Res; } //用法: //第二个参数留空则为gb1232编码 echo Pinyin('PHP100中文网'); //第二个参数随便设置则为utf-8编码 echo Pinyin('张恩平易近',1); ?> 刚开始因为习惯于ASP格式的写法,总是在这些方面出现问题,自己还总是找不到问题所在,这就提醒了自己,在写代码的时候一定要认真,不能粗心地老是少个“;”或者字母大小写不分,要不然很可能找半天都找不到错误。

再见西城 发表于 2015-2-4 00:06:12

写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。

若相依 发表于 2015-2-8 21:15:34

最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。

蒙在股里 发表于 2015-2-10 00:30:31

先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。

变相怪杰 发表于 2015-2-10 10:05:15

我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。

深爱那片海 发表于 2015-3-1 08:09:28

使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的

admin 发表于 2015-3-3 21:48:06

写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。

乐观 发表于 2015-3-9 22:51:21

你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。

柔情似水 发表于 2015-3-17 02:10:28

个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。

飘飘悠悠 发表于 2015-3-17 20:10:50

再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。

简单生活 发表于 2015-3-18 03:43:04

使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。

透明 发表于 2015-3-20 15:32:06

遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。

逍遥一派 发表于 2015-3-27 11:56:56

实践是检验自己会不会的真理。

金色的骷髅 发表于 2015-3-27 22:38:13

做为1门年轻的语言,php一直很努力。

小妖女 发表于 2015-4-7 19:02:57

真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,

活着的死人 发表于 2015-4-10 07:16:16

其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。

谁可相欹 发表于 2015-4-11 13:29:37

学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql

小魔女 发表于 2015-4-17 11:42:59

说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年具体的记不清啦,囧。

因胸联盟 发表于 2015-4-20 03:54:21

我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。

只想知道 发表于 2015-4-26 03:38:14

你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
页: [1] 2
查看完整版本: PHP网页编程之PHP汉字转换拼音的类