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 相关文章推荐
PHP批量生成缩略图的代码
Jul 19 PHP
php 进度条实现代码
Mar 10 PHP
PHP 字符截取 解决中文的截取问题,不用mb系列
Sep 29 PHP
php 删除记录同时删除图片文件的实现代码
May 12 PHP
PHP5中新增stdClass 内部保留类
Jun 13 PHP
深入php常用函数的使用汇总
Jun 08 PHP
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
May 06 PHP
php中socket的用法详解
Oct 24 PHP
php原生导出excel文件的两种方法(推荐)
Nov 19 PHP
Laravel框架分页实现方法分析
Jun 12 PHP
PHP如何搭建百度Ueditor富文本编辑器
Sep 21 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
Jun 13 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
漫威DC御用漫画家去世 他的表情包曾走红网络
2020/04/09 欧美动漫
PHP 强制下载文件代码
2010/10/24 PHP
php实现约瑟夫问题的方法小结
2015/03/23 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
2016/12/28 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
JS 中document.URL 和 windows.location.href 的区别
2009/11/11 Javascript
js解析与序列化json数据(一)json.stringify()的基本用法
2013/02/01 Javascript
DWZ table的原生分页浅谈
2013/03/01 Javascript
使用Node.js配合Nginx实现高负载网络
2015/06/28 Javascript
jquery实现简单实用的打分程序实例
2015/07/23 Javascript
JavaScript实现的多种鼠标拖放效果
2015/11/03 Javascript
总结JavaScript设计模式编程中的享元模式使用
2016/05/21 Javascript
使用伪命名空间封装保护独自创建的对象方法
2016/08/04 Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
2016/11/09 Javascript
详谈jQuery Ajax(load,post,get,ajax)的用法
2017/03/02 Javascript
Bootstrap模态框(Modal)实现过渡效果
2017/03/17 Javascript
日期时间范围选择插件:daterangepicker使用总结(必看篇)
2017/09/14 Javascript
JavaScript设计模式之观察者模式(发布订阅模式)原理与实现方法示例
2018/07/27 Javascript
echarts设置图例颜色和地图底色的方法实例
2018/08/01 Javascript
JS数组Object.keys()方法的使用示例
2019/06/05 Javascript
[44:01]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS paiN
2018/03/31 DOTA
解决Python中由于logging模块误用导致的内存泄露
2015/04/23 Python
Python实现翻转数组功能示例
2018/01/12 Python
PyCharm搭建Spark开发环境的实现步骤
2019/09/05 Python
基于keras输出中间层结果的2种实现方式
2020/01/24 Python
python如何写try语句
2020/07/14 Python
美国酒店控股公司:Choice Hotels
2018/06/15 全球购物
Linux不知道文件后缀名怎么判断文件类型
2012/04/26 面试题
法律专业自我鉴定
2013/10/03 职场文书
先进工作者获奖感言
2014/02/08 职场文书
爱我中华演讲稿
2014/05/20 职场文书
支部组织生活会方案
2014/06/10 职场文书
最美护士演讲稿
2014/08/27 职场文书
专家推荐信范文
2015/03/26 职场文书
组织委员竞选稿
2015/11/21 职场文书