在实际项目中,我们可能要用到把汉字生成拼音存到数据库中,比如新闻标题生成拼音做url,或者把分类项取首拼保存方便查询,应用场景很多。我现在做的项目是把城市分站生成首拼音做二级域名,现在是我正在用的类,分享给大家。
代码如下 | 复制代码 |
/** * 汉字拼音首字母工具类 * 注: 英文的字串:不变返回(包括数字) eg .abc123 => abc123 * 中文字符串:返回拼音首字符 eg. 湖南 => HN * 中英混合串: 返回拼音首字符和英文 eg. 我i我j => WIWJ * eg. * $py = new str2PY(); * * $result = $py->getInitials('周杰伦'); * * //获取首字母 * $result = $py->getFirstString('abc'); //A * $resutl = $py->getFirstString("一聚教程"); //y * */ class str2py { private $_pinyins = array( => 'A', => 'B', => 'C', => 'D', => 'E', => 'F', => 'G', => 'H', => 'J', => 'K', => 'L', => 'M', => 'N', => 'O', => 'P', => 'Q', => 'R', => 'S', => 'T', => 'W', => 'X', => 'Y', => 'Z', ); private $_charset = null; /** * 构造函数, 指定需要的编码 default: utf-8 * 支持utf-8, gb2312 * * @param unknown_type $charset */ public function __construct($charset = 'utf-8') { $this->_charset = $charset; } /** * 中文字符串 substr * * @param string $str * @param int $start * @param int $len * @return string */ private function _msubstr($str, $start, $len) { $start = $start * 2; $len = $len * 2; $strlen = strlen($str); $result = ''; for ($i = 0; $i { if ($i >= $start && $i { if (ord(substr($str, $i, 1)) > 129) { $result .= substr($str, $i, 2); } else { $result .= substr($str, $i, 1); } } if (ord(substr($str, $i, 1)) > 129) { $i++; } } return $result; } /** * 字符串切分为数组 (汉字或者一个字符为单位) * * @param string $str * @return array */ private function _cutWord($str) { $words = array(); while ($str != "") { if ($this->_isAscii($str)) {/* 非中文 */ $words[] = $str[0]; $str = substr($str, strlen($str[0])); } else { $word = $this->_msubstr($str, 0, 1); $words[] = $word; $str = substr($str, strlen($word)); } } return $words; } /** * 判断字符是否是ascii字符 * * @param string $char * @return bool */ private function _isAscii($char) { return ( ord(substr($char, 0, 1)) } /** * 判断字符串前3个字符是否是ascii字符 * * @param string $str * @return bool */ private function _isAsciis($str) { $len = strlen($str) >= 3 ? 3 : 2; $chars = array(); for ($i = 1; $i { $chars[] = $this->_isAscii($str[$i]) ? 'yes' : 'no'; } $result = array_count_values($chars); if (empty($result['no'])) { return true; } return false; } /** * 获取中文字串的拼音首字符 * * @param string $str * @return string */ public function getInitials($str) { if (empty($str)) return ''; if ($this->_isAscii($str[0]) && $this->_isAsciis($str)) { return $str; } $result = array(); if ($this->_charset == 'utf-8') { $str = iconv('utf-8', 'gb2312', $str); } $words = $this->_cutWord($str); foreach ($words as $word) { if ($this->_isAscii($word)) {/* 非中文 */ $result[] = $word; continue; } $code = ord(substr($word, 0, 1)) * 1000 + ord(substr($word, 1, 1)); /* 获取拼音首字母A--Z */ if (($i = $this->_search($code)) != -1) { $result[] = $this->_pinyins[$i]; } } return strtoupper(implode('', $result)); } /** * 20140624 wangtianbao 获取首字母 * @param string $str * @return string */ public function getFirstString($str) { //先把中文转换成字母 $new_string = $this->getInitials($str); if (empty($new_string)) { return ''; } else { return strtoupper(substr($new_string, 0, 1)); } } private function _getChar($ascii) { if ($ascii >= 48 && $ascii { return chr($ascii); /* 数字 */ } elseif ($ascii >= 65 && $ascii { return chr($ascii); /* A--Z */ } elseif ($ascii >= 97 && $ascii { return chr($ascii - 32); /* a--z */ } else { return '-'; /* 其他 */ } } /** * 查找需要的汉字内码(gb2312) 对应的拼音字符( 二分法 ) * * @param int $code * @return int */ private function _search($code) { $data = array_keys($this->_pinyins); $lower = 0; $upper = sizeof($data) - 1; $middle = (int) round(($lower + $upper) / 2); if ($code return -1; for (;;) { if ($lower > $upper) { return $data[$lower - 1]; } $tmp = (int) round(($lower + $upper) / 2); if (!isset($data[$tmp])) { return $data[$middle]; } else { $middle = $tmp; } if ($data[$middle] { $lower = (int) $middle + 1; } else if ($data[$middle] == $code) { return $data[$middle]; } else { $upper = (int) $middle - 1; } } } } |
如果大家感兴趣,有深入学习的想法,可以把它改成生成全拼音。

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

Atom editor mac version download
The most popular open source editor

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.