php将unicode编码转为utf-8方法

PHP中的ASCII、UTF-8和Unicode字符转换实战指南 Unicode字符集作为现代计算机系统处理文本的基础,它不仅包含世界上几乎所有的字符,还解决了字符编码中诸多长久以来存在的问题。本章节将深入探讨Unicode字符集的构成、发展历程以及与UTF-8、UTF-16等编码格式的关系,为读者提供一个全面的Unicode知识体系。函数的基本语法如下:其中,$str是需要被转换编码的字符串,指定了目标编码格式,而则指明了源数据的原始编码格式。若源编码格式未知或不确定,可以使用"auto"作为的值。 阅读详情

介绍

在前端开发中,为了让中文在不同的环境下都能很好的显示,一般是将中文转化为unicode格式,即\u4f60,比如:”你好啊”的unicode编码为”\u4f60\u597d\u554a”。

JS里将中文转为unicode编码很简单。

functionconvert2Unicode(str) {
    returnstr.replace(/[\u0080-\uffff]/g,
    function($0) {
        vartmp = $0.charCodeAt(0).toString(16);
        return"\u" + newArray(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转的化,结果直接为空了。但将字符串替换为数组然后在转就可以了。下面就有了下面封装的代码。

functionunicode2utf8($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将汉字转为实体字符:

functionconvert2Entity(str) {
    varlen = str.length;
    varre = [];
    for(vari = 0; i < len; i++) {      varcode = str.charCodeAt(i);       if(code > 256) {
            re.push('&#'+ code + ';');
        }else{
            re.push(str.charAt(i));
        }
    }
    returnre.join('');
}

php将实体字符转为utf-8汉字的方法:

functionentity2utf8onechar($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
    elseif($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
    elseif($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
    elseif($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
    elseif($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;
}
functionentities2utf8($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编码相互转换 最近恰好要用到unicode编码的转换,就去查了一下php的库函数,居然没找到一个函数可以对字符串进行Unicode的编码和解码!也罢,找不到的话就自己实现一下了。。。 Unicode和Utf-8编码的区别 Unicode是一个字符集,而UTF-8是Unicode的其中一种,Unicode是定长的都为双字节,而UTF-8是可变的,对于汉字来说Unicode占有的字节比UTF-8占用的字节少1个字节。Unicode为双字节,而UTF-8中汉字占三个字节。 UTF-8编码字符理论上可以最多到6个字节长,然而16位BMP(Basic Multilingual Plane)字符最多只用到3字节长。下面 立即下载

相关推荐

医疗影像技术实战:如何用Python快速生成DRR图像(附完整代码)

本文详细介绍了如何使用Python实现数字重建放射影像的快速生成。通过实战代码,从基础光线投射算法到性能优化,逐步讲解DRR图像生成的核心原理与工程实践,帮助开发者掌握医疗影像处理的关键技术,赋能放射治疗规划与图像引导手术等临床工具开发。

k8l9m0n的博客 72

php将文件编码转换为utf8编码格式,php怎么转换字符编码为utf8

在PHP中,可以先使用mb_detect_encoding()函数获取字符的原有编码;然后使用“mb_convert_encoding("指定的字符", "UTF-8", "字符原有的编码")”来将字符的编码转为utf8。本教程操作环境:windows7系统、PHP7.1版,DELL G3电脑php转换字符编码为utf8function strToUtf8($str){$encode = mb_d...

weixin_33066321的博客 561

项目实训(四)——SAM模型的学习与部署

这里的show_mask就是我们用mask的prompt进行分割,show_points就是我们用points进行分割,show_box就是通过box进行分割,这是SAM的三种prompt的方式。总的来说,Meta AI 的 Segment Anything 模型为我们提供了一种全新的物体识别和分割方式,其强大的泛化能力和广泛的应用前景将极大地推动计算机视觉领域的发展。这里有vit_h、vit_b、vit_l三种权重模型,这里可以根据自己的需要下载相应的权重模型。我们是下载的vit_h权重模型。

yyyyyyyx_的博客 1421

PHP实现Unicode和Utf-8互相转换

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34248258的博客 350

学生党投稿Applied Soft Computing:从导师账号登录到通讯作者设置的全流程解惑

本文详细解析了学生投稿Applied Soft Computing期刊的全流程,重点介绍了导师账号登录、通讯作者设置、作者排序调整以及开放获取费用等关键环节的避坑技巧。针对LaTeX稿件处理和财务选项选择提供了实用建议,帮助学生顺利完成SCI期刊投稿。

weixin_30352191的博客 211

传感器校准与标定:传感器的灵敏度校准_(11).常见传感器的灵敏度校准方法

线性校准:适用于传感器输出与输入之间存在线性关系的情况。通过收集数据并使用最小二乘法拟合线性方程,可以确定斜率和截距,从而实现校准。非线性校准:适用于传感器输出与输入之间存在非线性关系的情况。通过收集数据并使用非线性拟合方法(如最小二乘法),可以确定多项式或其他非线性方程的参数,从而实现校准。温度补偿校准:适用于传感器在不同温度下输出特性变化的情况。通过收集不同温度下的数据并使用温度补偿方程,可以提高传感器在不同温度下的测量精度。其他校准方法。

2401_87715305的博客 918

mysql utf8mb4 php_使用PHP从MySQL处理utf8mb4数据

This is probably something simple. I swear I've been looking online for the answer and haven't found it. Since my particular case is a little atypical I finally decided to ask here.I have a few tables...

weixin_39688687的博客 450

【WRF-Chem工具】pyVPRM 计算大气与陆地植被之间的 CO₂ 交换通量

pyVPRM 计算大气与陆地植被之间的 CO₂ 交换通量

WW、forever的博客 210

php unicode转utf-8编码 解析

php对unicode转utf-8编码  两者存在下面的对应关系: Unicode符号范围           | UTF-8编码方式 u0000 0000 - u0000 007F   | 0xxxxxxx u0000 0080 - u0000 07FF   | 110xxxxx 10xxxxxx u0000 0800 - u0000 FFFF   | 1110xxxx 10x

w0710210042的专栏 1007

YOLOv10涨点改进:SPPF原创自研创新 | SPPF创新结构,重新设计全局平均池化层和全局最大池化层,增强全局视角信息和不同尺度大小的特征

SPPF原创自研创新

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 2087

Oracle 从入门到精通系列(入门篇)1.1-Oracle 数据库发展史

Oracle 从入门到精通系列(入门篇)1.1-Oracle 数据库发展史

LuciferLiu_DBA 2191

utf8和utf8mb4的区别

一、简介 MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。 二、内容描述 那上面说了既然utf8能够存下大部分中文汉字,那为什么还要使用utf8mb4呢? 原来mysql支持的 utf8 编码最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了。三个字节的 UTF-8 最大

baidu_41444033的博客 927

Winform从入门到精通(2)——Button(史上最全)

本文介绍winform中Button控件的详细用法,包括所有属性和事件

qq_34059233的博客 1万+

php 中文转 utf-8编码,PHP 将 unicode 编码转为 utf-8 方法

介绍在前端开发中,为了让中文在不同的环境下都能很好的显示,一般是将中文转化为unicode格式,即\u4f60,比如:”你好啊”的 unicode编码为”\u4f60\u597d\u554a”。JS里将中文转为unicode编码很简单。function convert2Unicode(str) {return str.replace(/[\u0080-\uffff]/g,function($0) ...

weixin_31733409的博客 1563

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

php 按汉字拼音排序,PHP数组排序关于按中文拼音排序的问题

这天做个页面,需要将图片表里面图片的标签拉出来拆分好后去重按自然排序。结果很囧,应该排序的结果是0-9-A-z-阿-中,但是中文部分就是很乱。再找问题,结果发现自然排序是按照字符编码的顺序来排列。由于当前页面是UTF-8编码,UTF-8大家应该清楚吧,我称为是“电脑码”,给电脑看的~汗…… 如果换成GBK或者GB2312编码就不会这样了,这跟汉字在字符集的编码有关。比如”人”这个字,在GBK和GB...

weixin_35724999的博客 335

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

PHP 5.4以下版本 json_encode无法输出中文问题

PHP 5.4以下版本 json_encode输出中文uft-8问题 最保险的方法,亲测 在PHP开发接口中,我们经常在返回数据中用到了json_encode函数; 默认json_encode 对中文只支持utf-8,不支持GBK; json_encode函数返回的字符串中中文的显示是unicode编码,有些时候项目要求接口返回的数据就是可以看到的中文; 处理方法: i: 先对返回结果中的数据有中文的全部处理成utf-8,如:str=iconv("GBK","utf−8",str = iconv("GBK

shizg1994的博客 380

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

php5.2 Json不能正确处理中文的解决办法

一、JSON处理中文遇到的问题 php5.2新增的json功能是非常受欢迎的,但是经过测试发现,json_encode对中文的处理是有问题的:1.不能处理GB编码,所有的GB编码都会替换成空字符.2.utf8编码的中文被编码成unicode编码 二、JSON中文问题的处理现在我们来考虑一下PHP的JSON扩展无法处理中文的问题,基本的解决方案就是在服务器端进行json编码前先对中文

wangjun_1218的专栏 847

浅谈用php对unicode转utf-8编码

(IT柏拉图 原创文章)如果只是unicode转utf-8编码的算法,网上到处都是了,不过很多人也是你抄我,我抄你,根本就不理解why和do,本文除了给出最简单的php对unicode转utf-8编码函数之外,也深入讨论了这两种编码的关系,理解好了会发现网上一些旧的东西,是严重多余兼过期的,因为从utf-8流行开始到现在,早已经由原来六字节可变编码到实际完全居于unicode(UCS-2)的稳定阶

ddboy的专栏 4321

[PHP] unicode码、UTF-8码、字符的相互转换

unicode与UTF-8 unicode是一个大型字符集,unicode字符集收录了世界上所有的字符,并且为每一个字符分配了一个唯一的数字类型的ID值,这个ID在英文中叫unicode code point,下文统称为unicode码。例如中文的 “严” 字,它的unicode码是\x4e25(十六进制)。因此unicode本质上是一个key-value映射表,key是unicode码,value是对应的字符。 下文中的十六进制数字,统一会在数字的前面加上 \x 前缀,方便识别。 接下来的问题是,这个

IT部落格 3340

PHP UNICODE编码(\u) 和UTF-8 之间转换

header("content:application/json;chartset=uft-8"); //将内容进行UNICODE编码 function unicode_encode($name){ $name = iconv('UTF-8', 'UCS-2', $name); $len = strlen($name); $str = ''; for ($i ...

4928

Java中弄懂Unicode和UTF-8编码方式

1.Unicode Unicode 是全球文字统一编码。它把世界上的各种文字的每一个字符指定唯一编码,实现跨语种、跨平台的应用。 Unicode 只是一个符号集,它只规定了每个符号的二进制数,却没有规定这个二进制数应该如何存储。比如,汉字‘严’的 Unicode 是十六进制数4E25,转换成二进制数足足有15位(100111000100101),也就是说,这个符号的表示至少需要2个字节。表示其他更...

诚 5万+

Unicode 和 UTF-8 有什么区别?

本文主要介绍了字符编码相关知识,重点解析了Unicode与UTF-8的区别:Unicode是字符集标准,UTF-8是其实现编码规则。文章通过PHP代码示例展示了JSON编码/解码过程中Unicode码位的处理方式,并提出了关于ASCII、GB2312/GBK等编码标准的区别问题。作者指出GB系编码仍在广泛使用主要是出于存储和流量节省的考虑,同时提及了UTF-8/16/32及BOM等概念的差异问题有待后续补充。全文为开发者理解字符编码体系提供了基础指引。

"代码"的日常搬运 5227

PHP实现字符编码互转[ANSI、Unicode、Unicode big endian、UTF-8、UTF-8+Bom]

最近在做工具的时候遇到读取两个文件编码不一致的情况,但实际情况并不是用iconv转换就可以的那么简单,因为其中一个编码是ANSI,另一个是Unicode big endian,这时候用函数mb_detect_encoding 都识别不了编码,更别想用几个函数就能简单转换了。 不过google到了一个不错的php类,引入即可。 PHP字符编码互转类 <?php /** 字符编码转换类, A...

丈哥SEO博客 2083
上一篇: Query Tmpl详细讲解
下一篇: ngnix配置文件
lcathm
博客等级 码龄18年 37粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值