php将unicode编码转为utf-8方法
介绍
在前端开发中,为了让中文在不同的环境下都能很好的显示,一般是将中文转化为unicode格式,即\u4f60,比如:”你好啊”的 unicode编码为”\u4f60\u597d\u554a”。
JS里将中文转为unicode编码很简单。
- function convert2Unicode(str) {
- return str.replace(/[\u0080-\uffff]/g,
- function($0) {
- var tmp = $0.charCodeAt(0).toString(16);
- return "\u" + new Array(5 - tmp.length).join('0') + tmp;
- });
- }
并且也很简单,直接alert出来或者innerHTML到dom节点里都可以。
但如果将\u4f60\u597d\u554a”字符传递给php,php就不能直接echo或者其他操作了。直接echo的话还是原生的字符,不 能自动转化为中文。
php将unicode转为utf-8方法
在php5.0及以上版本中提供了json_encode, json_decode方法。在使用json_encode变量的时候,如果变量里含有中文的话,会将中文转为unicode格式。所以在想是否可以通过 json_decode将unicode转为中文呢?实际测试发现是可以的,但对单一的字符串发现有些问题。
对于简单的字符串,发现有时候使用json_decode转的化,结果直接为空了。但将字符串替换为数组然后在转就可以了。下面就有了下面封装的代 码。
- function unicode2utf8($str){
- if(!$str) return $str;
- $decode = json_decode($str);
- if($decode) return $decode;
- $str = '["' . $str . '"]';
- $decode = json_decode($str);
- if(count($decode) == 1){
- return $decode[0];
- }
- return $str;
- }
使用这个方法可以很好的将unicode编码转为utf-8编码。
附上js转为实体字符和php将实体字符转为汉字的方法
js将汉字转为实体字符:
- function convert2Entity(str) {
- var len = str.length;
- var re = [];
- for (var i = 0; i < len; i++) { var code = str.charCodeAt(i); if (code > 256) {
- re.push('&#' + code + ';');
- } else {
- re.push(str.charAt(i));
- }
- }
- return re.join('');
- }
php将实体字符转为utf-8汉字的方法:
- function entity2utf8onechar($unicode_c){
- $unicode_c_val = intval($unicode_c);
- $f=0x80; // 10000000
- $str = "";
- // U-00000000 - U-0000007F: 0xxxxxxx
- if($unicode_c_val <= 0x7F){ $str = chr($unicode_c_val); } //U-00000080 - U-000007FF: 110xxxxx 10xxxxxx else if($unicode_c_val >= 0x80 && $unicode_c_val <= 0x7FF){ $h=0xC0; // 11000000 $c1 = $unicode_c_val >> 6 | $h;
- $c2 = ($unicode_c_val & 0x3F) | $f;
- $str = chr($c1).chr($c2);
- }
- //U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
- else if($unicode_c_val >= 0x800 && $unicode_c_val <= 0xFFFF){ $h=0xE0; // 11100000 $c1 = $unicode_c_val >> 12 | $h;
- $c2 = (($unicode_c_val & 0xFC0) >> 6) | $f;
- $c3 = ($unicode_c_val & 0x3F) | $f;
- $str=chr($c1).chr($c2).chr($c3);
- }
- //U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
- else if($unicode_c_val >= 0x10000 && $unicode_c_val <= 0x1FFFFF){ $h=0xF0; // 11110000 $c1 = $unicode_c_val >> 18 | $h;
- $c2 = (($unicode_c_val & 0x3F000) >>12) | $f;
- $c3 = (($unicode_c_val & 0xFC0) >>6) | $f;
- $c4 = ($unicode_c_val & 0x3F) | $f;
- $str = chr($c1).chr($c2).chr($c3).chr($c4);
- }
- //U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
- else if($unicode_c_val >= 0x200000 && $unicode_c_val <= 0x3FFFFFF){ $h=0xF8; // 11111000 $c1 = $unicode_c_val >> 24 | $h;
- $c2 = (($unicode_c_val & 0xFC0000)>>18) | $f;
- $c3 = (($unicode_c_val & 0x3F000) >>12) | $f;
- $c4 = (($unicode_c_val & 0xFC0) >>6) | $f;
- $c5 = ($unicode_c_val & 0x3F) | $f;
- $str = chr($c1).chr($c2).chr($c3).chr($c4).chr($c5);
- }
- //U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
- else if($unicode_c_val >= 0x4000000 && $unicode_c_val <= 0x7FFFFFFF){ $h=0xFC; // 11111100 $c1 = $unicode_c_val >> 30 | $h;
- $c2 = (($unicode_c_val & 0x3F000000)>>24) | $f;
- $c3 = (($unicode_c_val & 0xFC0000)>>18) | $f;
- $c4 = (($unicode_c_val & 0x3F000) >>12) | $f;
- $c5 = (($unicode_c_val & 0xFC0) >>6) | $f;
- $c6 = ($unicode_c_val & 0x3F) | $f;
- $str = chr($c1).chr($c2).chr($c3).chr($c4).chr($c5).chr($c6);
- }
- return $str;
- }
- function entities2utf8($unicode_c){
- $unicode_c = preg_replace("/\&\#([\da-f]{5})\;/es", "entity2utf8onechar('\\1')", $unicode_c);
- return $unicode_c;
- }
entity2utf8onechar方法来自http://blog.sina.com.cn/s /blog_48d7f3f40100o6ak.html
使用方式:
- $utf8chars = entities2utf8("啊你好啊");
转自:http://www.welefen.com/php-unicode-to-utf8.html
php将unicode编码转为utf-8方法的更多相关文章
- Jmeter 处理Unicode编码转为中文
对于接口中返回报文,有的接口返回信息是Unicode编码,写断言的时候,要么就Response Assertion就写成Unicode编码的断言,如下图: 真心不觉得返回报文加密能有多安全,别人将报文 ...
- jmeter beanshell处理请求响应结果时Unicode编码转为中文
在Test Plan下创建一个后置BeanShell PostProcessor,粘贴如下代码即可: String s=new String(prev.getResponseData()," ...
- python 数据写入json文件时中文显示Unicode编码问题
一.问题描述 import json dir = { '春晓':'asfffa', '春眠不觉晓' : '处处闻啼鸟', '夜来风雨声' : 56789, 'asdga':'asdasda' } fp ...
- Java用native2ascii命令做unicode编码转换
背景:在做Java开发的时候,常常会出现一些乱码,或者无法正确识别或读取的文件,比如常见的validator验证用的消息资源(properties)文件就需要进行Unicode重新编码.原因是java ...
- 【转】javascript和html中unicode编码和字符转义的详解
不是十分理解unicode和html转义的情况下,可能会误用,所以下面会对它们再做比较容易理解的解释: 1.html中的转义:在html中如果遇到转义字符(如“ ”),不管你的页面字符编码是utf-8 ...
- 多字节(一般指GBK) utf8 Unicode 编码互转
// c:\Program Files\Microsoft SDKs\Windows\v7.0A\Include\WinNls.h #define CP_ACP 0 // default to ANS ...
- BIG5, GB(GB2312, GBK, ...), Unicode编码, UTF8, WideChar, MultiByte, Char说明与区别
汉语unicode编译方式,BIG5是繁体规范,GB是简体规范 GB是大陆使用的国标码,BIG5码,又叫大五码,是台湾使用的繁体码. BIG5编码, GB编码(GB2312, GBK, ...), U ...
- javascript和html中unicode编码和字符转义的详解
1.html中的转义:在html中如果遇到转义字符(如“ ”),不管你的页面字符编码是utf-8亦或者是GB2312,都会直接打印成相应的字符:而当遇到(如:“\u8981”[此处的8981是16进制 ...
- Qt中文编码和QString类Unicode编码转换
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/g423tgl234/article ...
随机推荐
- Repeater动态添加行
<table class="table table-striped table-bordered table-hover"> <asp:Re ...
- null值的判断
select * from Students where Address IS null --判断address是nulselect * from Students where Address is ...
- PHP基础之 file_get_contents() 函数
定义和用法 file_get_contents() 函数把整个文件读入一个字符串中. 和 file() 一样,不同的是 file_get_contents() 把文件读入一个字符串. file_get ...
- [Effective Modern C++] Item 6. Use the explicitly typed initializer idiom when auto deduces undesired types - 当推断意外类型时使用显式的类型初始化语句
条款6 当推断意外类型时使用显式的类型初始化语句 基础知识 当使用std::vector<bool>的时候,类型推断会出现问题: std::vector<bool> featu ...
- discuz二次开发笔记(三)------discuz的安装步骤
下载好discuz的安装包后,解压在自己定义的文件夹里面,将upload里面的文件拷贝出来放到和upload同级的地方,然后删除upload文件夹. 打开浏览器,输入你文件夹的地址:如:http:// ...
- Android listview 的优化
接[Android listview的应用][1] 在我们上一篇[Android listview的应用][1]中,我们的adapter中的getView()方法中每次都将布局重新加载一遍,这样就会导 ...
- shopnc 导出Excel数据问题实例 && ajax 获取当前值并传递
任务:从商家中心导出数据,各个商品所属情况. 商品导出到Excel文件功能 /导出exel 功能make-in-lemon public function createExcelOp(){ $mode ...
- iframe自适应高度的多种方法方法小结(转)
对于自适应高度的代码有很多,可效率什么的考虑进来好代码就不多见了,不过思路倒是差不多的不带边框的iframe因为能和网页无缝的结合从而不刷新页面的情况下更新页面的部分数据成为可能,可是 iframe的 ...
- Wcf实现IServiceBehavior拓展机制
IServiceBehavior接口 描述:提供一种在整个服务内修改或插入自定义拓展机制: 命名空间: System.ServiceModel.Description程序集: System.Ser ...
- 新版703n刷openwrt
自带的官方固件: 3.17.1 Build 140120 Rel.56593n WR703N v1 00000000 在不能web页面刷固件,因为带了校验功能. 老外给出了不上TTL刷路由的方法: h ...