<?php
/**
* 中文转拼类
*
* @author lanqueen.com<admin@lanqueen.com>
* @date 2012-11-16 6:53
*/
class PinYin {
// 码表
private $fp = null;
private $dat = 'pinyin.dat';
public function __construct(){
$this->dat = dirname(__FILE__).'/'.$this->dat;
if (is_file($this->dat)) {
$this->fp = fopen($this->dat, 'rb');
}
}
/**
* 转拼音
*
* @param string $str 汉字
* @param bool $ucfirst 首字母大写
* @param bool $polyphony 忽略多读音
* @param bool $onlyFirst 只显示首字母
* @return string
*/
public function encode($str, $ucfirst=true, $polyphony=true,$onlyFirst=true) {
$ret = '';
$len = mb_strlen($str, 'UTF-8');
for ($i = 0; $i < $len; $i++) {
$py = $this->pinyin(mb_substr($str, $i, 1, 'UTF-8'),$onlyFirst);
if ($ucfirst && strpos($py, ',') !== false) {
$pys = explode(',', $py);
$ret.= implode(',', array_map('ucfirst', ($polyphony ? array_slice($pys, 0, 1) : $pys)));
} else {
$ret.= $ucfirst ? ucfirst($py) : $py;
}
/*非字母时后加空格*/
//if (strlen($py)!==1) $ret=' ';
}
return trim(preg_replace('/-+/', '-', $ret), '-');
}
/**
* 汉字转十进制
*
* @param string $word
* @return number
*/
private function char2dec($word) {
$bins = '';
$chars = str_split($word);
foreach($chars as $char) $bins.= decbin(ord($char));
$bins = preg_replace('/^.{4}(.{4}).{2}(.{6}).{2}(.{6})$/', '$1$2$3', $bins);
return bindec($bins);
}
/**
* 单个字转拼音
*
* @param string $char 汉字
* @return string
*/
public function pinyin($char,$onlyF=true){
if (strlen($char) == 3 && $this->fp) {
$offset = $this->char2dec($char);
// 判断 off 值
if ($offset >= 0) {
fseek($this->fp, ($offset - 19968) << 4, SEEK_SET);
if($onlyF) { //只返回单字拼音第一个字母
$newPY = substr(fread($this->fp, 16),0,1);
}else{ //返回单字拼音并前后加-
$newPY = '-' . trim(fread($this->fp, 16)) . '-';
}
return $newPY;
}
}
return preg_replace("/[^A-Za-z0-9\-]/", "-", $char);
}
public function __destruct() {
if ($this->fp) {
fclose($this->fp);
}
}
}
Joomla 2.5别名优化插件v1.2(简体中文)
需积分: 9 200 浏览量
2012-11-18
11:18:31
上传
评论
收藏 48KB ZIP 举报
Uniteliu
- 粉丝: 0
- 资源: 2
最新资源
- 基于微信小程序的通用订票系统设计源码
- 基于ThinkPHP的轻量级PHP开发框架设计源码
- 基于CSS的响应式鲜花网站全屏效果设计源码
- 基于JavaScript的访客预约系统设计源码
- 基于Vue和ECharts的工作租房数据可视化系统设计源码
- 1040g0cg310ravpiu6ibg5pg00tsipsln3ju2d0g 2
- 基于Python的SAR图像去噪CNN-NLM设计源码
- redhat6升级到redhat7,过程redhat6.x-> redhat6.10->rehat7.9 主版本最高版本
- 基于Django的流程引擎设计源码
- 基于Node.js的Express框架与MySQL的后台管理系统设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈