用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)协同开发?(环境搭建教程)

