php下GB跟UTF-8编码的互相转换

汉字编码转换工具:实用指南与实战应用 在当今的数字化世界中,汉字编码转换工具扮演着至关重要的角色。这些工具的主要目的是解决不同计算机系统和应用程序间编码不一致的问题。随着互联网技术的发展,数据交换变得日益频繁,而编码的差异往往导致信息的误读或丢失。因此,对汉字编码转换工具的理解和应用变得尤为关键。UTF-8(8-bit Unicode Transformation Format)编码是一种针对Unicode的可变长度字符编码,它可以用一至四个字节来表示一个字符,编码方式兼顾了ASCII的兼容性和变长编码的节省空间特性。 阅读详情
    在php程序开发中,有时候要遇到GB2312(GBK)码跟UTF-8之间转换的问题, 
尤其是用php进行WAP开发的时候。因为手机能够显示的是UTF-8编码,通过WAP 
提交的文字也是用UTF-8编码。为了能够正常显示和处理用户输入的中文,经常 
会遇到GB2312(GBK)跟UTF-8之间的转码问题。 
    目前在网上能够找到GB2312->UTF-8的php示例程序,而UTF-8->GB2312(GBK) 
的转码程序我没有找到。另外,Jsp/Java下有现成的转码函数,其实linux平台 
下的php也有现成的函数,只是默认php编译的时候没有加载该模块。 
    基于以上考虑,本人在原有GB2312->UTF-8转码程序的基础上,写了一个 
UTF-8到GB的转码程序。另外,在第二部分讲了一下如何配置和使用php自带的 
函数来进行转码。 
 
【第一部分】使用GB跟Unicode码表进行转换 
    汉字的GB2312/GBK(以下简称GB)跟Unicode的汉字编码之间有一个一一对应 
的关系,有一张码表列出了他们的对应关系。不过这个码表中GB码跟实际的php 
中用bin2hex函数获得GB码值(ASCII)之间差了0x8080,需要做一下处理。 
 
1、GB->UTF-8 
    中国php联盟上有这样一篇文章写了如何转换,该文章为 
     http://www.phpx.com/show.php?d=col&i=58    
    这篇文章就是基于上面的码表来转换的,该码表也在哪有得下载 
     http://www.phpx.com/download/utf8/gb2312.txt 
     
    但是这篇文章只给出了GB->UTF-8和Unicode->UTF8的转码函数,缺少一个 
UTF-8到GB的转码函数。参考他的文章,本人写了一个这样的函数。 
    另外,我将他写的函数用类进行封装了一下,写了一个convert类。因为原 
文每次调用转码函数都要读取一次gb2312.txt文件,而I/O操作非常好时间,如 
果一个php文件中多次调用这个函数的话,严重影响响应速度。因此用一个类来 
封装,在类的构造函数里读取gb2312.txt,这样一个php实例化一个convert, 
只需进行一次I/O操作。我做个一个测试,封装好的转码函数,运行10000次需 
要3秒,而原来的函数运行100次用了16秒。         
    该类的部分代码如下: 
class  convert { 
     
    
// gb2312和utf-8对应的编码文件 
     var   $filename   =   " /usr/local/system/phplib/gb2312.txt " ;            
     
    
var   $codetable   =   array ();              // 码表读取后存入这个数组 
     
    //构造函数 

     function  convert() { 
        
$tmp   =   file ( $this -> filename); 
        
while (  list ( $key , $value )  =   each ( $tmp ) ) 
 
            
$this -> codetable[ hexdec ( substr ( $value , 0 , 6 ))]  =   
                 
substr ( $value , 7 , 6 ); 
    } 
     
    
// GB->UTF-8 
     function  toUTF8( $gb ) { 
        
// 转换过程可参考上面列出的文章,这里就不贴了 
         return   $utf8 ;         
    } 
     
}     
 
2.UTF-8->GB 
    上面给出的那个gb2312是gb跟Unicode之间的对应关系,而UTF-8跟Unicode之 
间也有一个转换,要从UTF-8->GB,就必须先从UTF-8->Unicode,再用上面的表来 
Unicode->GB. 
    UTF-8是Unicode的Transformation Format,因为Unicode编码中存在着 
0x0034酱紫的字符,这个字符的高位字节是0x00,跟C语言下string的结束标 
志/0冲突,会引起判断字符串结束的混乱,因此有了个Transformation  
Format ---UTF-8。 
 
    从Unicode 到UTF-8的标准可参见RFC-2279,其实主要的一点我们需要知道 
下面这张对应的转换关系: 
   UCS-4 range (hex.)           UTF-8 octet sequence (binary) 
   0000 0000-0000 007F   0xxxxxxx 
   0000 0080-0000 07FF   110xxxxx 10xxxxxx 
   0000 0800-0000 FFFF   1110xxxx 10xxxxxx 10xxxxxx 
 
   0001 0000-001F FFFF   11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 
   0020 0000-03FF FFFF   111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 
   0400 0000-7FFF FFFF   1111110x 10xxxxxx ... 10xxxxxx 
 
这张表左边一列是Unicode编码,右边一列是UTF-8编码。汉字的编码范围在第三 
行。这个表的意思(以第三行汉字为例):汉字编码是双字节,比如“爱”的 
Unicode编码为0x7231(在上面的gb2312中对应有),她的二进制编码是 
0111 0010 0011 0001 
根据上面的第三行,取“爱”的二进制后六位(0~5),前面加10(为1011 0001), 
再往前第6~11位前再加10(为1000 1000),最高的四位前加1110(为1110 0111), 
于是“爱”的UTF-8编码为: 
1110 0111 1000 1000 1011 0001 ( 0xe788b1) 
 
那么反过来UTF-8到Unicode的话,只要把UTF-8的二进制的第0~5,8~13,16~19位取 
出来组合成双字节的Unicode码就可以了。采用php的位操作(或,与,移位)就 
可实现 
 
$unicode = (($utf & 0x0F0000)>>4) | (($utf & 0x3F00)>>2) | ($utf &  
    0x3F); 
 
获得了Unicode值后,再从上面的gb2312.txt里找到对应的gb2312码,在该码上加 
上0x8080(因为上文说过,这个码表跟实际汉字bin2hex出来的值差0x8080,也就是 
汉字的最高位是为1)。 
 
于是,在上面的convert类中可以加上一个UTF2GB的函数。代码如下: 
    
function  UTF2gb( $str ) { 
        
if (  ! trim ( $str ) ) 
            
return   $str ; 
        
$reverse   =   array (); 
        
while (  list ( $key , $value )  =   each ( $this -> codetable) ) 
            
$reverse [ hexdec ( $value )]  =   $key ; 
        
$gb   =   "" ; 
        
while ( $str ) { 
            
if  (  ord ( substr ( $str , 0 , 1 )) > 0xE0   ) 
            { 
                
$tmp   =   substr ( $str , 0 , 3 ); 
                
$str   =   substr ( $str , 3 , strlen ( $str )); 
                
$utf   =   hexdec ( bin2hex ( $tmp )); 
                
$unicode   =  (( $utf   &   0x0F0000 ) >> 4 )  |  (( $utf   &   0x3F00 ) >> 2 ) 
                     
|  ( $utf   &   0x3F ) ; 
                
$gb   =   $gb   .    pack ( " n " , ( $reverse [ $unicode ]) | 0x8080  ); 
            } 
            
else  
            { 
                
$gb   =   $gb   .   substr ( $str , 0 , 1 ); 
                
$str   =   substr ( $str , 1 , strlen ( $str )); 
 
                 
            } 
        } 
        
return   $gb ;         
    } 
    注:1、这里定义了一个新的Hashtable(其实是数组),把原来的codetable的 
key和value对调了一下,为了方便索引。而我没有把这个数组在Constructor中初始 
化,因为UTF-8->GB的函数我调用的比较少,为了程序优化考虑,放在了这里。 
        2、pack("n",bin_var)函数是把二进制编码转换为字符的一个函数,可参 
考php manual.  
C# 与蓝牙 BLE 设备通信:基于 Windows.Devices.Bluetooth 实现手环/传感器数据读取 本文介绍了如何利用C#的Windows.Devices.Bluetooth命名空间实现与蓝牙BLE设备的通信。首先概述了BLE技术特性及其在物联网中的应用场景,包括智能穿戴设备和传感器。随后讲解了BLE的GATT协议架构,解析了服务(Service)和特性(Characteristic)的概念。文章重点展示了通过C#实现设备扫描、连接、数据读取的完整代码示例,并详细说明了如何使用通知(Notifications)功能实现实时数据更新。最后提供了订阅心率测量特性变化的实现代码,为开发者提供了完整的BLE设备通 阅读详情

相关推荐

防火墙——双机热备理论讲解

本端和对端协商失败。有可能是因为本端和对端设备的软件版本不一致、某端配置错误、对端设备的心跳接口状态为Down、HRP源或目的端口号被修改、或者底层链路不通等原因导致。会话表、SeverMap表、IP监控表、分片缓存表、GTP表、黑名单、PAT方式端口映射表、NO-PAT方式地址映射表。两台设备一主一备,正常情况下业务流量由主设备处理,当主设备故障时,业务流量平滑切换到备用设备进行处理,业务不中断。开启自动备份后,当主用设备配置了一条可备份的命令或产生了可备份的会话表状态时,会直接备份到备用设备上。

m0_49864110的博客 2万+

php 如何将字体转为gb,利用php怎么将utf-8与GB2312相互转换

利用php怎么将utf-8与GB2312相互转换发布时间:2020-12-25 14:34:37来源:亿速云阅读:76作者:Leah这篇文章将为大家详细讲解有关利用php怎么将utf-8与GB2312相互转换,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。复制代码 代码如下:function get_utf8_to_gb($value){$val...

weixin_26870929的博客 390

构建多节点AI代理网络:OpenClaw协同框架与实战部署指南

在分布式系统与AI代理技术领域,多节点协同是提升智能体能力与扩展性的核心挑战。其原理在于通过设计清晰的通信协议与数据同步机制,使分散的智能体能够共享状态、知识与技能,从而实现1+1>2的群体智能。这一技术价值在于突破了单点AI的能力上限,为构建复杂、鲁棒且可扩展的自动化系统提供了基础。典型的应用场景包括跨设备任务编排、企业级工作流自动化以及大规模AI代理集群的管理。本文聚焦于OpenClaw这一开源AI代理框架,深入探讨如何利用模块化设计(如网状网络与任务控制中心)实现记忆共享与统一调度,解决多网关协同中的

weixin_42521032的博客 298

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

一. 编码原理及实现   unicode编码是实现utf-8与gb系列编码(gb2312、gbk、gb18030)转换的基础,虽然我们也可以直接做一个utf-8到这些编码的对照表,但很少有人会这么做,因为utf-8的可变编码具有不确定性,因此一般情况使用都是unicode与gb编码的对照表,unicode(UCS-2)实际上是utf-8的基础编码,utf-8只是它的一种实现而已,两者存在下面的对

u011862178的专栏 2839

基于单片机的继电器参数测试系统设计

由于原有测试系统在参数设置上过于单一,在对继电器测试过程中需要多次进行器件连接,导致对其测试准确度下降,会造成继电器的二次损伤,基于单片机研究继电器参数测试系统的设计方法。在硬件设计上,构建二级模式集散控制框架,利用单片机进行数据采集和处理,满足实时继电器参数数据的同步控制;设计双极性反向比例输出电路,分别利用电极电阻对继电器两侧电压进行放大,实现继电器实时电压的检测。实验结果:以两组类型断电器为测试对象,分别连接示波器进行真实数据采集,在本文系统的应用下所得参数测试结果,与真实的数据相一致,具有实际应用效

weixin_45905610的博客 1438

Unity 多线程编程笔记 _Task详解

士大夫

weixin_43405845的博客 4384

linux下使用iconv命令转换gbk编码为UTF-8编码

1. 通过iconv -l 命令查看,其支持的编码格式还不少,之间可以互相转换2. 转换gbk编码文件为utf-8编码文件简洁命令:iconv  -f gbk -t utf-8 index.html > aautf8.html其中-f指的是原始文件编码,-t是输出编码  index.html 是原始文件   aautf8.html是输出结果文件3. 转换gbk编码文件为utf-8编码文件详细...

kongjunlongaa的博客 2万+

【C++PCL】点云文件读写

本文介绍 PCL 中 PCD 与 PLY 点云文件的读取、保存和字段检查,覆盖 PointXYZI、PointXYZRGB、ASCII、二进制及压缩二进制,并给出 C++11 实操代码与参数调试建议。

weixin_45196569的博客 42

php 字符编码转换类,支持ANSI、Unicode、Unicode big endian、UTF-8、UTF-8+Bom 互相转换

php 字符编码转换类,支持ANSI、Unicode、Unicode big endian、UTF-8、UTF-8+Bom 互相转换。

傲雪星枫 3万+

9篇5章2节:NHIS 数据库的常规数据下载

文章概述了 NHIS-Teen、NHPI NHIS 等补充性调查以及 2024 年 NHIS 数据资源的具体内容,包括问卷材料、技术文档和数据模块,为研究者高效、规范地使用 NHIS 数据提供参考框架。

MD Code 1440

ESP32 双雷达融合盲区车辆接近预警系统设计与实现

/ 超声波传感器引脚// 触发引脚// 回声引脚// 预警模块引脚// 蜂鸣器引脚// LED引脚// 串口配置(毫米波雷达用UART2)#define BAUD_RATE 115200 // 雷达串口波特率(IWR6843默认配置)// 预警阈值(可根据实际需求调整)// 高危区阈值(3m)// 预警区阈值(10m)// 传感器数据存储// 毫米波雷达距离(m)// 毫米波雷达速度(km/h)// 超声波距离(m)// 融合后距离(m)

weixin_42300449的博客 745

mysql utf8转gb2312_PHP函数utf8转gb2312编码

PHP函数utf8转gb2312编码今天,我太点儿低了!转换成功了看不到字符,以为用法有问题,查看源文件,居然是和中的乱码,导致标签变成了:乱七鼓拽?/title>,后全部内容被拉到中做头去了,还在群里喊了半天,发现是这的问题,气都气死了!!!用ICONV函数:iconv("UTF-8","gb2312","abc阳光123");据说这样好些,可以忽略转换时的错误!iconv("U...

weixin_39828198的博客 272

【RT-DETR实战】112、NCNN模型转换与层实现支持:从模型文件到推理引擎的硬核实战

本文详细记录了将RT-DETR模型部署到NCNN框架的全过程及关键要点。作者首先遇到MultiHeadAttention等算子不支持的问题,通过ONNX中间转换和自定义层实现解决。文章具体介绍了PyTorch到NCNN的权重转换技巧、模型优化方法(包括量化和线程优化)以及调试经验,强调逐层对比输出、预处理检查和边界情况测试的重要性。最后分享了保持转换流程可复现性的实用建议,指出手动调试虽然耗时但能加深对模型的理解,体现了工程师在解决技术难题时的专业精神与成就感。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 41

php 字符串编码方式转换,php 字符串编码转换的常用几种方法_PHP教程

php教程 字符串编码转换的常用几种方法mb_convert_encoding()PHP的内码转换函数版本(PHP 4 >= 4.0.6, PHP 5)这个函数可以将各种编码互相转换做一个GBK To UTF-8< ?phpheader(“content-Type: text/html; charset=Utf-8”);echo mb_convert_encoding(“你是我的友仔”...

weixin_33728584的博客 1204

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

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

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

php 字符串编码方式转换,php字符串编码转换的常用几种方法_PHP教程

php教程 字符串编码转换的常用几种方法mb_convert_encoding()PHP的内码转换函数版本(PHP 4 >= 4.0.6, PHP 5)这个函数可以将各种编码互相转换做一个GBK To UTF-8< ?phpheader("content-Type: text/html; charset=Utf-8");echo mb_convert_encoding("你是我的友仔"...

weixin_42189611的博客 388

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

UEFI开发探索58-UTF-8编码问题

(请保留-> 作者: 罗冰 https://blog.youkuaiyun.com/luobing4365) 这篇要记录的知识,实际上不限于UEFI编程,在其他编程上也一样会遇到。只是因为最近这段时间,沉迷于国产机器开发的项目,频繁地调试UEFI代码,遇到了这些问题,我觉得应该有普遍性,姑且记录下来。 在日常的编程中,特别是处理字符串以及显示汉字的时候,会被各种编码搞得糊里糊涂。毕竟编码是给计算机程序看的,记忆起来还是比较费事,即使当时搞清楚了,过一段时间不用,好像又会混淆。 1历史 计算机从美国发...

1615

vim 编辑器 打开GB2312、GBK文件乱码解决方法

安装好的操作系统一般都带有vim编辑器,但是默认不支持GB2312中文,打开文件出现乱码,解决办法如下。 1.打开以下文件 1 sudovim/var/lib/locales/supported.d/local 2.添加以下内容 1 2 3 zh_CN.GBK GBK zh_CN.GB...

BRAVE MAN的博客 3613

php 判断是否是日文,php正则判断中文韩文的编码的例子

中文编码双字节字符编码范围:1. GBK (GB2312/GB18030)\x00-\xff →GBK双字节编码范围\x20-\x7f →ASCII 取出非汉字的字符\xa1-\xff 中文 →gb2312 取出所有中文(不包括字母数字和字符)\x80-\xff 中文 →gbk 取出所有中文(不包括字母数字和字符)2. UTF-8 (Unicode)\一-...

weixin_34327800的博客 1280

编码问题 php字符编码转换类

各种平台和软件打开显示的编码问题,需要使用不同的编码,根据我们不同的需求。 php 字符编码转换类,支持ANSI、Unicode、Unicode big endian、UTF-8、UTF-8+Bom 互相转换。 四种常见文本文件编码方式 ANSI编码: 无文件头(文件编码开头标志性字节) ANSI编码字母数字占一个字节,汉字占两个字节 回车换行符,单字节, 十六进制表示为0d 0a ...

weixin_34114823的博客 166

Linux下对文件进行编码转换

http://bbs.lpi-china.org/viewthread.php?tid=2912  其实说到编码转换,那就不得不说到iconv这个库了,如果已经安装了这个工具,那在命令行下直接打这个命令就行了。下面就用这个工具来实现中文系统下的常用编码转换。首先,来了解一下iconv这个命令的使用方法。命令格式如下iconv -f 编码 -t 编码 文件名-f

chuj_hzh的专栏 1070

php-----utf8和gbk相互转换

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

weixin_34029680的博客 124

urlencode和文本编码

电脑中一个字符大都用八位数的二进制数字表示,标准的ANSI编码规范规定0~127总共128个数字代表信息(字母,数字,标点,控制码,空格等),剩下没用到的128个编码没用做规定,不同国家地区制定了不同的标准,由此产生了GB2312,BIG5以及JIS等各自的编码标准。这些使用 2 个字节(0x80~0xFF范围内)来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANS

时间是把杀刀猪 1219

文件编码问题

文件编码问题:20161201 这个问题是在开发中遇到的一个简单的小问题,自己也是第一次遇到。刚开始心里是很模糊的,完全没有什么解决的方案。起初,我以为是不同的系统之间打开统一格式的文件会使用不同的编码,所以,导致的乱码显示问题。不过,都是.txt的文本文件,在不同的文本软件下打开却是不同的效果。比如在WINDOWS系统中打开是默认使用的ANSI编码打开,所以,不会出现任何编码问题。正常显示的,...

weixin_34050389的博客 114

java big5编码 转 gbk 无表_java big5编码 转 gbk 无表

java big5编码 转 gbk 无表[2021-01-30 18:58:29]简介:php中big5转utf8乱码的解决办法:首先生成tab文件,并生成时要保证tab文件不存在;然后将指定页面转码测试;接着打印出文字库;最后big5转【utf-8】即可。php中big5转utf8乱码的解决php big5转utf8的实现方法:首先创建一个PHP示例文件;然后使用“mb_convert_en...

weixin_39968823的博客 209
上一篇: 封装了个在图片上写文字的程序
下一篇: 工作笔记
an9ryfr09
博客等级 码龄23年 199粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值