<?php
/*
* 功能: 字符Unicode编码转换
* 参数一: 要转码的字符串
* 参数二: 是否转码ASCII字符 默认不转码
*
* 作者:青石 2015年10月9日14:59:04 修改自网络流传代码加以优化
*/
function unicode_encode($string, $isAll = false){
$string = iconv('UTF-8', 'UCS-2', $string); // 将字符编码转换为 UCS-2
$strLen = strlen($string) - 1; // 获取字符长度
$retStr = '';
for ($i = 0; $i < $strLen; $i = $i + 2){
$codeA = ord($string[$i]); // 取出第一位 字节
$codeB = $string[$i+1]; // 取出第二位字符
// 如果第一位字节大于0则表示是扩展字符(汉字) 否则为 ASCII字符
if($codeA > 0){
$retStr.= '&#' . ($codeA * 256 + ord($codeB)) . ';';
}else{
// 判断ASCII字符是否转码
$retStr.= $isAll ? '&#' . ord($codeB) . ';' : $codeB;
}
}
return $retStr;
}
/*
* 功能: Unicode编码转换字符
* 参数一: 要转码的字符串
* 参数二: 是否转码ASCII字符 默认不转码
*
* 作者:青石 2015年10月9日16:15:44 修改自网络流传代码加以优化
*/
function unicode_decode($string){
$pregStr = '/&#([0-9]+);/';
// 进行匹配并在出错时返回
if(preg_match_all($pregStr, $string, $codeList, PREG_OFFSET_CAPTURE) === false) return false;
$retStr = '';
$repOffset = 0;
foreach ($codeList['1'] as $key => $value){
// 大于255 则说明是2位字节 (汉字)
$code = intval($value['0']); // 转换为整数
// 如果大于255 则说明有两个字节
$codeB = $code % 256; // 取第二个字节的内容
if($code > 255){
$codeA = ($code - $codeB) / 256; // 计算出第一个字节
$newStr = chr($codeA) . chr($codeB); // 拼接成一个字符
$newStr = iconv('UCS-2', 'UTF-8', $newStr); // 将字符编码转换为 UCS-2
}else{
$newStr = chr($codeB); // 拼接成一个字符
}
// 替换掉原来的内容
$repLen = strlen($codeList['0'][$key]['0']);
$repStart = $codeList['0'][$key]['1'];
$string = substr_replace($string, $newStr, $repStart - $repOffset, $repLen);
$repOffset+= $repLen - strlen($newStr);
}
return $string;
}
$str = '锄禾日当午,HanDi禾下土;举头望明月,12345...';
// 进行编码
$enStr = unicode_encode($str, true);
echo $enStr . "\n";
// 进行解码
$deStr = unicode_decode($enStr);
echo $deStr . "\n";
Unicode编码转换之PHP方法
上一篇: 【精】提问的智慧
下一篇: [新技能]一键解除网页右键限制
最新文章
最近回复
- 青石: 因为赚钱啊
- 123: 怎么现在都流行传销手机卡了呢?
- 青石: 您好,如贵站升级 https 后,非常乐意添加,实际上...
- 青石: 已修改
- 龙鲲: 大佬,我博客换域名了,新域名是 https://lkl...
- outshine学习笔记: 这个方法我认为可行
- hanser: 说的太对了哥们
- 青石: 不确定,不过一直这么实施的,也没找我过。
- c urchin: 请问现在这个方法还有效吗
- 我的妈呀: 其实吧,享受孤独也挺好的
友情链接
标签
- 原创
- php
- 源码
- 工具
- javascript
- 教程
- 易语言
- linux
- shell
- 学习
- 代理
- asp
- 软件
- 网站
- 破解
- java
- 小工具
- 日志
- 学习Java
- 原创工具
- php源码
- js脚本
- nginx
- git
- 空间
- 推荐
- 备份
- FTP
- 日记
- 短文
- 搞笑
- 短语
- 大学
- 免费
- 服务器
- 放假
- 搬家
- 2345
- Wordpress
- 插件
- 模块
- 公告
- 生活日记
- cURL
- 开源
- java学习
- 类
- CSDN
- URL重写
- 笔记本拆机
- Typecho
- Laravel
- 跑跑卡丁车
- 隐身
- 辅助工具
- 网络游戏
- 跳转
- 域名
- 迅雷
- 快车
- QQ旋风
- 下载地址
- 链接
- 转换
- PhpZip
- isphp
- 绿色
- FlashFXP
- 汉化
- 新浪
- 轻博客
- 赠送
- 邀请码
- 攻击
- 上班
- 上网
- 百度变形金刚 变3
- 8U
- 主机屋
- 翻墙
- 中国平安保险
- 保险
- 意外电话
- 亿家
- 条约
- 新版
- 测试
- 免费空间
- php空间
- 免费域名
- 开学
- 涨价
- 生活
- 超级QQ
- 淘宝
- 购物
- 推荐优惠
- gravatar
- 被墙
- 和谐
- gfw
- 修复
- 网赚
- 联盟
- 推广
- 赚钱
- 兼容
- 编辑框
- 热键框
- 按键精灵
- 童年
- 好文
- GoDaddy
- 优惠码
- 转载,体制,社会评论
- Windows7
- 做系统
- ,技巧
- CMP
- 优酷代理
- 在外打工
- 苏州
- Worspress
- 博客
- 更新
- 优化
- 心得
- 图床
- cookie-free
- 静态化
- 飞信
- API
- phpfetion
- fetionapi
- 百度网盘
- 低价空间
- DA面板
- 硬盘
- 售后
- 硬盘坏了
- 联想售后
- 私开发票
- QQ网页登陆协议
- 分享
- 中秋
- 调班
- 小米
- 经验,生活日记
- 小众
- 好友关系分析
- 2012年
- 订阅
- 维护
- 记录
- 类与对象
- 对象
- 超级会员
- 微云
- 网盘
- 华数剧集下载
- BAE
- bae_app_conf.lua
- app.conf
- 知趣天气
- 知趣猜图
- 猜图答案
- 资源分享
- QQ工具
- QQ好友
- 查询
- 路由器
- 网关
- 经验技巧
- 电脑
- 故障排除
- phpdir
- 网盘代理
- 酷盘代理
- Dell M4010拆机
- 2345王牌技术员联盟
- 2345王牌手机联盟
- 自动答题
- 惠普笔记本拆机
- 技术员
- 无线网桥接
- 挂qq
- 缓存
- cache
- 骗子
- 编码转换
- unicode
- 电脑技巧
- 解除网页右键限制
- guid
- uuid
- 极客学院
- 程序员
- 民主
- 雾霾
- 日本
- 环境污染
- songtaste复活
- 技巧
- 取随机数
- 代码分享
- jsonp
- centos
- csdn免积分
- 原创作品
- c#
- 随机生成ip
- 效率测试
- 年终总结
- 新年计划
- 阿里云
- nginx配置
- 服务器安全
- 端口映射
- swoole
- 造车轮
- 脚本
- 正则表达式
- session
- cookies
- 安全
- 内网穿透
- JS
- CDK
- 生成算法
- 回忆
- 御前四宝
- 签到
- v2ex
- 我的爱情
- 南京
- 旅游
- CDN
- 开机启动
- Docker
- 环境包
- Translate
- 翻译
- PHPUnit
- 单元测试
- 富爸爸穷爸爸
- 老鼠赛跑
- 现金流游戏
- 快捷指令
- 捷径
- 一键开门
- uTools
- 文档
- 多版本共存
- Apple
- 笔记
- 规范
- 自解压
- 自释放
- PT
- ssh-key
- github
- mac
- 在线代理
- 资源
- 测试的啊
- 技术员,无线网桥接
- 年度总结
- 备案
- 申请Key
- 百度翻译
- 腾讯翻译
- 阿里云翻译
- 机器翻译
- 彩云小译