PHP实现Unicode编码相互转换的方法示例


Posted in PHP onNovember 17, 2020

本文实例讲述了PHP实现Unicode编码相互转换的方法。分享给大家供大家参考,具体如下:

<?php
/**
* $str 原始中文字符串
* $encoding 原始字符串的编码,默认utf-8
* $prefix 编码后的前缀,默认"&#"
* $postfix 编码后的后缀,默认";"
*/
function unicode_encode($str, $encoding = 'utf-8', $prefix = '&#', $postfix = ';') {
 //将字符串拆分
 $str = iconv("UTF-8", "gb2312", $str);
 $cind = 0;
 $arr_cont = array();
 for ($i = 0; $i < strlen($str); $i++) {
 if (strlen(substr($str, $cind, 1)) > 0) {
  if (ord(substr($str, $cind, 1)) < 0xA1) { //如果为英文则取1个字节
  array_push($arr_cont, substr($str, $cind, 1));
  $cind++;
  } else {
  array_push($arr_cont, substr($str, $cind, 2));
  $cind+=2;
  }
 }
 }
 foreach ($arr_cont as &$row) {
 $row = iconv("gb2312", "UTF-8", $row);
 }
 //转换Unicode码
 foreach ($arr_cont as $key => $value) {
 $unicodestr.= $prefix . base_convert(bin2hex(iconv('utf-8', 'UCS-4', $value)), 16, 10) .$postfix;
 }
 return $unicodestr;
}
/**
* $str Unicode编码后的字符串
* $decoding 原始字符串的编码,默认utf-8
* $prefix 编码字符串的前缀,默认"&#"
* $postfix 编码字符串的后缀,默认";"
*/
function unicode_decode($unistr, $encoding = 'utf-8', $prefix = '&#', $postfix = ';') {
 $arruni = explode($prefix, $unistr);
 $unistr = '';
 for ($i = 1, $len = count($arruni); $i < $len; $i++) {
 if (strlen($postfix) > 0) {
  $arruni[$i] = substr($arruni[$i], 0, strlen($arruni[$i]) - strlen($postfix));
 }
 $temp = intval($arruni[$i]);
 $unistr .= ($temp < 256) ? chr(0) . chr($temp) : chr($temp / 256) . chr($temp % 256);
 }
 return iconv('UCS-2', $encoding, $unistr);
}
$str = "PHP编程:3water.com";
$unistr = unicode_encode($str);
$unistr2 = unicode_decode($unistr);
echo $unistr . '<br />';
echo $unistr2 . '<br />';
$unistr = unicode_encode($str,'GBK','\\u');
$unistr2 = unicode_decode($unistr,'GBK','\\u');
echo $unistr . '<br />';
echo $unistr2 . '<br />';
PHP 相关文章推荐
Discuz 5.0 中读取纯真IP数据库函数分析
Mar 16 PHP
一个很不错的PHP翻页类
Jun 01 PHP
批量修改RAR文件注释的php代码
Nov 20 PHP
PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
Aug 15 PHP
destoon官方标签大全
Jun 20 PHP
PHP判断网络文件是否存在的方法
Mar 12 PHP
php上传文件并显示上传进度的方法
Mar 24 PHP
PHP实现通过URL提取根域名
Mar 31 PHP
PHP数据库处理封装类实例
Dec 24 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
Jul 19 PHP
apache集成php7.3.5的详细步骤
Jun 20 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
Oct 21 PHP
PHP实现文件下载【实例分享】
Apr 28 #PHP
PHP实现批量删除(封装)
Apr 28 #PHP
ThinkPHP实现生成和校验验证码功能
Apr 28 #PHP
PHP后台微信支付和支付宝支付开发
Apr 28 #PHP
ThinkPHP中create()方法自动验证表单信息
Apr 28 #PHP
ThinkPHP实现简单登陆功能
Apr 28 #PHP
ThinkPHP实现分页功能
Apr 28 #PHP
You might like
php采集速度探究总结(原创)
2008/04/18 PHP
PHP使用逆波兰式计算工资的方法
2015/07/29 PHP
PHP读取大文件末尾N行的高效方法推荐
2016/06/03 PHP
详谈PHP程序Laravel 5框架的优化技巧
2016/07/18 PHP
出现“不能执行已释放的Script代码”错误的原因及解决办法
2007/08/29 Javascript
基于jQuery的树控件实现代码(asp.net+json)
2010/07/11 Javascript
关于js注册事件的常用方法
2013/04/03 Javascript
js 时间格式与时间戳的相互转换示例代码
2013/12/25 Javascript
jQuery基于ajax实现带动画效果无刷新柱状图投票代码
2015/08/10 Javascript
jquery select2的使用心得(推荐)
2016/12/04 Javascript
Vue.js实现微信过渡动画左右切换效果
2017/06/13 Javascript
BootStrap数据表格实例代码
2017/09/13 Javascript
微信小程序开发之tabbar图标和颜色的实现
2018/10/17 Javascript
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
2019/08/27 Javascript
[00:23]魔方之谜解锁款式
2018/12/20 DOTA
python实现简单温度转换的方法
2015/03/13 Python
python实现图片处理和特征提取详解
2017/11/13 Python
matplotlib中legend位置调整解析
2017/12/19 Python
Python排序算法之选择排序定义与用法示例
2018/04/29 Python
Python下使用Scrapy爬取网页内容的实例
2018/05/21 Python
python多进程提取处理大量文本的关键词方法
2018/06/05 Python
python微信公众号之关键词自动回复
2018/06/15 Python
python读取和保存图片5种方法对比
2018/09/12 Python
python格式化输出保留2位小数的实现方法
2019/07/02 Python
python实现3D地图可视化
2020/03/25 Python
h5封装下拉刷新
2020/08/25 HTML / CSS
迪卡侬波兰体育用品商店:Decathlon波兰
2020/03/31 全球购物
武汉世纪畅想数字传播有限公司 .NET笔试题
2015/06/13 面试题
介绍一下ICMP(Internet Control Message Protocol)Internet控制信息协议
2016/11/26 面试题
户外宣传策划方案
2014/05/25 职场文书
2014年药房工作总结
2014/11/22 职场文书
消防演习通知
2015/04/25 职场文书
初中军训感言
2015/08/01 职场文书
如何制作自己的原生JavaScript路由
2021/05/05 Javascript
【DOTA2】高能暴走TK秀!PSG LGD vs ASTER - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA
zabbix 代理服务器的部署与 zabbix-snmp 监控问题
2022/07/15 Servers