完善的汉字转拼音php转换类
办法是利用矩阵,汉字的组成方式是两个ascii字符,一个高位码,一个低位码,界限分别是128-264 64-128
每个汉字拼音最长为8个字符,由此组成二维矩阵进行查询,弊端是无法解决多音字问题
class pinyin{ /* 是否将拼音文件读取到内存内,损耗少许内存,几百kb的样子,速度可以略有提升, */ var $ismemorycache = 1; /* 是否只获取首字母 */ var $isfrist = 1; /* 拼音矩阵文件地址 */ var $path = "py.qdb"; /* 内存拼音矩阵 */ var $memorycache; /* 拼音文件句柄 */ var $handle; /* 转换发生错误盒子 */ var $errormsgbox; /* 转换结果 */ var $result; var $array = array(); var $n_t = array("ā" => "a","á" => "a","ǎ" => "a","à" => "a","ɑ" => "a", "ō" => "o","ó" => "o","ǒ" => "o","ò" => "o", "ē" => "e","é" => "e","ě" => "e","è" => "e","ê" => "e", "ī" => "i","í" => "i","ǐ" => "i","ì" => "i", "ū" => "u","ú" => "u","ǔ" => "u","ù" => "u", "ǖ" => "v","ǘ" => "v","ǚ" => "v","ǜ" => "v","ü" => "v" ); /* 转换入口 @params $str 所需转换字符,$istonemark 是否保留音标 $suffix 尾缀,默认为空格 */ function chinesetopinyin($str,$istonemark = 0,$suffix = ""){ $this->py($str,$istonemark,$suffix); return $this -> result; } function get(){ return $this -> result; } function py($str,$n = 0,$s = ""){ $strlength = strlen($str); if($strlength == 0){ return ""; } $this->result = ""; if(is_array($str)){ foreach($str as $key => $val){ $str[$key] = $this->py($val,$n,$s); } return; } if(empty($this->handle)){ if(!file_exists($this->path)){ $this->addoneerrormsg(1,"拼音文件路径不存在"); return false; } if(is_array($str)){ foreach($str as $key => $val){ $str[$key] = $this->py($val,$n,$s); } } if($this -> ismemorycache){ if(!$this->memorycache){ $this->memorycache = file_get_contents($this->path); for($i = 0 ; $i 128){ $ord2 = ord(substr($str, ++$i, 1)); if(!isset($this->array[$ord1][$ord2])){ $leng = ($ord1 - 129) * ((254 - 63) * 8 + 2) + ($ord2 - 64) * 8; $this->array[$ord1][$ord2] = trim(substr($this->memorycache,$leng,8)); } $strtrlen = $this->isfrist ? 1 : 8; $this->result .= substr($this ->array[$ord1][$ord2],0,$strtrlen).$s; }else{ $this->result .= substr($str,$i,1); } } } }else{ $this->handle = fopen($this->path,"r"); for($i = 0 ; $i 128){ $ord2 = ord(substr($str, ++$i, 1)); if(!isset($this->array[$ord1][$ord2])){ $leng = ($ord1 - 129) * ((254 - 63) * 8 + 2) + ($ord2 - 64) * 8; fseek($this -> handle,$leng); $this->array[$ord1][$ord2] = trim(fgets($this->handle,8)); } $strtrlen = $this->isfrist ? 1 : 8; $this->result .= substr($this ->array[$ord1][$ord2],0,$strtrlen).$s; }else{ $this->result .= substr($str,$i,1); } } } if(!$n){ $this -> result = strtr($this -> result,$this -> n_t);} } } function addoneerrormsg($no,$reason){ $this->errormsgbox[] = "<b>error:</b>" . $no . "," . $reason; } function showerrormsg(){ foreach($this->errormsgbox as $val){ echo $val."rnrn"; } } function __destruct(){ if(is_array($this->errormsgbox)){ $this->showerrormsg(); } } }
로그인 후 복사
之前遇见过这个难题,发现流传的代码都不怎么完善,汉字库总共有20k+的汉字,大多数的是拿几百个常用汉字打算糊弄过去,在火星文流传的今天,是不行的。
还有种读取词典然后转换的,每行一个汉字|拼音,这种弊端非常大,速度慢,耗费巨大内存,仅仅explode一下读入数组,再循环一次,就能耗费上百m的内存,如果一个单页面耗费上百m,负载稍微大点只能泪奔了。
永久地址:
转载随意~请带上教程地址吧^^
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사
어 ass 신 크리드 그림자 : 조개 수수께끼 솔루션
3 몇 주 전
By DDD
Windows 11 KB5054979의 새로운 기능 및 업데이트 문제를 해결하는 방법
2 몇 주 전
By DDD
Atomfall에서 크레인 제어 키 카드를 찾을 수 있습니다
3 몇 주 전
By DDD
<s> : 데드 레일 - 모든 도전을 완료하는 방법
4 몇 주 전
By DDD
Atomfall Guide : 항목 위치, 퀘스트 가이드 및 팁
4 몇 주 전
By DDD

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제
Gmail 이메일의 로그인 입구는 어디에 있나요?
7658
15


Cakephp 튜토리얼
1393
52


C# 튜토리얼
1205
24


Steam의 계정 이름 형식은 무엇입니까?
91
11


Win11 활성화 키 영구
73
19

