用PHP将Unicode 转化为UTF-8的实现方法(推荐)

发布时间 - 2026-01-10 22:55:22    点击率:

实例如下:

function unescape($str) {
  $str = rawurldecode($str);
  preg_match_all("/(?:%u.{4})|&#x.{4};|&#\d+;|.+/U",$str,$r);
  $ar = $r[0];
  //print_r($ar);
  foreach($ar as $k=>$v) {
    if(substr($v,0,2) == "%u"){
      $ar[$k] = iconv("UCS-2BE","UTF-8",pack("H4",substr($v,-4)));
 }
    elseif(substr($v,0,3) == "&#x"){
      $ar[$k] = iconv("UCS-2BE","UTF-8",pack("H4",substr($v,3,-1)));
 }
    elseif(substr($v,0,2) == "&#") {
       
      $ar[$k] = iconv("UCS-2BE","UTF-8",pack("n",substr($v,2,-1)));
    }
  }
  return join("",$ar);
}
echo unescape("紫星蓝");

今天有用户反馈,表单系统用户提交的数据中文会乱码。测试发现问题出在 iconv 转换上。
iconv('UCS-2',
'GBK',
'中文')
Google

搜索发现,原因是 Linux 服务器上 UCS-2 编码方式与 Winodws 不一致。

于是,我改成

 iconv('UCS-2BE',
'GBK',
'中文')
 试试,中文正常了

以下是有关两个平台

UCS-2 编码的潜规则:

1、 UCS-2 不等于 UTF-16。 UTF-16 每个字节使用 ASCII 字符范围编码,而 UCS-2 对每个字节的编码可以超出 ASCII 字符范围。UCS-2 和 UTF-16 对每个字符至多占两个字节,但是他们的编码是不一样的。

2、对于 UCS-2, windows 下默认是 UCS-2LE。用 MultibyteToWidechar(或者A2W)生成的是 UCS-2LE 的 unicode。windows记事本可以将文本保存为 UCS-2BE,相当于多了层转换。

3、 对于 UCS-2, linux 下默认是 UCS-2BE。用iconv(指定UCS-2)来转换生成的是 UCS-2BE 的 unicode。如果转换windows平台过来的 UCS-2, 需要指定 UCS-2LE。

4、鉴于windows和linux等多个平台对 UCS-2 的理解不同(UCS-2LE,UCS-2BE)。MS 主张 unicode 有个引导标志(UCS-2LE FFFE, UCS-2BE FEFF),以表明下面的字符是 unicode 并且判别 big-endian 或 little-endian。 所以从 windows 平台过来的数据发现有这个前缀,不用慌张。

5、 linux 的编码输出,比如从文件输出,从 printf 输出,需要控制台做适当的编码匹配(如果编码不匹配,一般和该程序编译时的编码有若干关系),而控制台的转换输入需要查看当前的系统编码。比如控制台当前的编码是 UTF-8, 那么 UTF-8 编码的东西能正确显示,GBK 就不能;同样,当前编码是 GBK, 就能显示 GBK 编码,后来的系统应该更智能的处理好更多的转换了。不过通过 putty 等终端还是需要设置好终端的编码转换以解除乱码的烦恼。

以上这篇用PHP将Unicode 转化为UTF-8的实现方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# php  # unicode转utf8  # PHP通过iconv将字符串从GBK转换为UTF8字符集  # php utf-8转unicode的函数  # PHP如何实现Unicode和Utf-8编码相互转换  # 支持生僻字且自动识别utf-8编码的php汉字转拼音类  # PHP UTF8编码内的繁简转换类  # 用PHP实现将GB编码转换为UTF8  # PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析  # PHP二进制与字符串之间的相互转换教程  # PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明  # PHP中实现中文字符进制转换原理分析  # PHP实现UTF8二进制及明文字符串的转化功能示例  # 的是  # 给大家  # 他们的  # 有个  # 就能  # 多个  # 希望能  # 就不能  # 这篇  # 转化为  # 表单  # 不等于  # 小编  # 出在  # 大家多多  # 保存为  # 不匹配  # 器上  # 发现有  # ar 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  奇安信“盘古石”团队突破 iOS 26.1 提权  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  如何在不使用负向后查找的情况下匹配特定条件前的换行符  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  如何用AWS免费套餐快速搭建高效网站?  如何快速搭建FTP站点实现文件共享?  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  制作旅游网站html,怎样注册旅游网站?  潮流网站制作头像软件下载,适合母子的网名有哪些?  如何快速完成中国万网建站详细流程?  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  Laravel怎么清理缓存_Laravel optimize clear命令详解  香港服务器租用费用高吗?如何避免常见误区?  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  Laravel如何处理表单验证?(Requests代码示例)  如何在Windows 2008云服务器安全搭建网站?  原生JS实现图片轮播切换效果  无锡营销型网站制作公司,无锡网选车牌流程?  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  如何在Windows服务器上快速搭建网站?  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  Python并发异常传播_错误处理解析【教程】  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  Laravel如何使用Telescope进行调试?(安装和使用教程)  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  浅谈redis在项目中的应用  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  米侠浏览器网页背景异常怎么办 米侠显示修复  制作电商网页,电商供应链怎么做?  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  android nfc常用标签读取总结  Laravel怎么调用外部API_Laravel Http Client客户端使用  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  高防服务器:AI智能防御DDoS攻击与数据安全保障  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  Laravel如何创建自定义Artisan命令?(代码示例)  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  Python自动化办公教程_ExcelWordPDF批量处理案例  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)