1. /**
  2. * $str 原始中文字符串
  3. * $encoding 原始字符串的编码,默认GBK
  4. * $prefix 编码后的前缀,默认"&#"
  5. * $postfix 编码后的后缀,默认";"
  6. */
  7. function unicode_encode($str, $encoding = 'GBK', $prefix = '&#', $postfix = ';') {
  8. $str = iconv($encoding, 'UCS-2', $str);
  9. $arrstr = str_split($str, 2);
  10. $unistr = '';
  11. for($i = 0, $len = count($arrstr); $i < $len; $i++) {
  12. $dec = hexdec(bin2hex($arrstr[$i]));
  13. $unistr .= $prefix . $dec . $postfix;
  14. }
  15. return $unistr;
  16. }
  17.  
  18. /**
  19. * $str Unicode编码后的字符串
  20. * $decoding 原始字符串的编码,默认GBK
  21. * $prefix 编码字符串的前缀,默认"&#"
  22. * $postfix 编码字符串的后缀,默认";"
  23. */
  24. function unicode_decode($unistr, $encoding = 'GBK', $prefix = '&#', $postfix = ';') {
  25. $arruni = explode($prefix, $unistr);
  26. $unistr = '';
  27. for($i = 1, $len = count($arruni); $i < $len; $i++) {
  28. if (strlen($postfix) > 0) {
  29. $arruni[$i] = substr($arruni[$i], 0, strlen($arruni[$i]) - strlen($postfix));
  30. }
  31. $temp = intval($arruni[$i]);
  32. $unistr .= ($temp < 256) ? chr(0) . chr($temp) : chr($temp / 256) . chr($temp % 256);
  33. }
  34. return iconv('UCS-2', $encoding, $unistr);
  35. }
  36.  
  37. //GBK字符串测试
  38. $str = '<b>哈哈</b>';
  39. echo $str.'<br />';
  40.  
  41. $unistr = unicode_encode($str);
  42. echo $unistr.'<br />'; // <b>哈哈</b>
  43.  
  44. $str2 = unicode_decode($unistr);
  45. echo $str2.'<br />'; //<b>哈哈</b>
  46.  
  47. //UTF-8字符串测试
  48. $utf8_str = iconv('GBK', 'UTF-8', $str);
  49. echo $utf8_str.'<br />'; // <b>鍝堝搱</b> 注:UTF在GBK下显示的乱码!可切换浏览器的编码测试
  50.  
  51. $utf8_unistr = unicode_encode($utf8_str, 'UTF-8');
  52. echo $utf8_unistr.'<br />'; // <b>哈哈</b>
  53.  
  54. $utf8_str2 = unicode_decode($utf8_unistr, 'UTF-8');
  55. echo $utf8_str2.'<br />'; // <b>鍝堝搱</b>
  56.  
  57. //其它后缀、前缀测试
  58. $prefix_unistr = unicode_encode($str, 'GBK', "\\u", '');
  59. echo $prefix_unistr.'<br />'; // \u60\u98\u62\u21704\u21704\u60\u47\u98\u62
  60.  
  61. $profix_unistr2 = unicode_decode($prefix_unistr, 'GBK', "\\u", '');
  62. echo $profix_unistr2.'<br />'; //<b>哈哈</b>

php 中文unicode 互转的更多相关文章

  1. 中文unicode范围及unicode编解码

    中文unicode范围 : [\u4e00-\u9fa5] 普通字符串可以用多种方式编码成Unicode字符串,具体要看你究竟选择了哪种编码:unicodestring = u"Hello ...

  2. JAVA处理数字与中文数字互转(最大处理数字不超过万兆即:9999999999999999.9999)

    package practice; import java.util.Arrays; /** * 数字与中文数字互转(最大处理数字不超过万兆即:9999999999999999.9999) * @au ...

  3. JsonCpp中文unicode编码问题

    用JsonCpp解析C++中文unicode编码,转换问题,今天找打了一种解决办法 这个问题画了不少时间,贴出来供大家参考 在json_reader.cpp中找到codePointToUTF8函数,添 ...

  4. java 中文与unicode互转

    public class FontUtil { public static void main(String[] args) { System.out.println(chinaToUnicode(& ...

  5. json_encode中文unicode的问题

    近期做微信卡券开发遇到一个问题,创建卡券post数据给服务器时返回data format error, do NOT use json unicode encode (/uxxxx/uxxxx), p ...

  6. 中文和unicode互转

    public class Test { public static void main(String[] args) { String uname="欧阳红"; for (int ...

  7. Java 16进制、unicode互转

    package service; import java.util.regex.Matcher; import java.util.regex.Pattern; public class CodeCh ...

  8. php 解决json_encode中文UNICODE转码问题

    用PHP的json_encode来处理中文的时候, 中文都会被编码, 变成不可读的, 类似"\u***"的格式,如果想汉字不进行转码,这里提供三种方法 1.升级PHP,在PHP5. ...

  9. [转]php 解决json_encode中文UNICODE转码问题

    FROM : http://blog.csdn.net/bjash/article/details/9834497 用PHP的json_encode来处理中文的时候, 中文都会被编码, 变成不可读的, ...

随机推荐

  1. vue-cli 3.x 修改dist路径和在本地查看方法

    打包文件路径问题 需要在项目的根目录添加一个vue.config.js.在这个文件中,我们可以进行一些个性化定制. module.exports = { // 基本路径 baseUrl: './', ...

  2. 预处理、const、static与sizeof-static有什么作用(至少说出2个)

    1:在C语言中,关键字static有3个明显的作用: (1)在函数体,一个被声明为静态的变量在这一函数被调用的过程中维持其值不变. (2)在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所 ...

  3. 20175329&20175313&20175318 2019-2020 《信息安全系统设计基础》实验三

    20175329&20175313&20175318 2019-2020 <信息安全系统设计基础>实验三

  4. JS高级_数据类型

    1.分类: a.基本(值)类型: * String :任意字符串 * Number :任意数字 * boolean : true/false * undefined :undefined * null ...

  5. vuejs2从入门到精通与项目开发实战

    vuejs2从入门到精通:一.基础部分0.课件1.介绍2.vue实例3.模板语法4.计算属性和观察者5.Class与Style绑定6.条件渲染7.列表渲染8.事件处理9.表单输入绑定10.1.组件(1 ...

  6. 【JDBC】使用Spring提供的JDBCTemplate通过PrepareStatement向MySql数据库插入千万条数据,耗时32m47s,速度提升有限

    数据库环境还和原来一样,只是从Statement换成了PrepareStatement,都说PrepareStatement因为预编译比Statement快,但是实际运行真快不了多少. 代码如下: p ...

  7. leetcode312 戳气球

    动态规划 time O class Solution { public: int maxCoins(vector<int>& nums) { nums.insert(nums.be ...

  8. mybatis之动态SQL操作之插入

    1)  根据条件,插入一个学生 /** * 持久层*/ public class StudentDao { /** * 动态SQL--插入 */ public void dynaSQLwithInse ...

  9. kubernetes介绍(1)

    一.Kubernetes 介绍: kubernetes起源 Kubernetes (K8s) 是 Google 在 2014 年发布的一个开源项目. 据说 Google 的数据中心里运行着超过 20 ...

  10. java文件夹上传

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 首先我们需要了解的是上传文件三要素: 1.表单提交方式:post (get方式提交有大小 ...