首页 > 语言 > 关键词  > php最新资讯  > 正文

PHP 开发中的中文编码问题

2008-11-10 16:49 · 稿源:php118.com

PHP程序设计中中文编码问题曾经困扰很多人,导致这个问题的原因其实很简单,每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的扩展 ASCII 码, 中国的 GB2312-80,日本的 JIS 等。作为该国家/区域内信息处理的基础,字符编码集起着统一编码的重要作用。字符编码集按长度分为 SBCS(单字节字符集),DBCS(双字节字符集)两大类。早期的软件(尤其是操作系统),为了解决本地字符信息的计算机处理,出现了各种本地化版本(L10N),为了区分,引进了 LANG, Codepage 等概念。但是由于各个本地字符集代码范围重叠,相互间信息交换困难;软件各个本地化版本独立维护成本较高。因此有必要将本地化工作中的共性抽取出来,作一致处理,将特别的本地化处理内容降低到最少。这也就是所谓的国际化(118N)。各种语言信息被进一步规范为 Locale 信息。处理的底层字符集变成了几乎包含了所有字形的 Unicode。

现在大部分具有国际化特征的软件核心字符处理都是以 Unicode 为基础的,在软件运行时根据当时的ocale/Lang/Codepage 设置确定相应的本地字符编码设置,并依此处理本地字符。在处理过程中需要实现 Unicode 和本地字符集的相互转换,甚或以 Unicode 为中间的两个不同本地字符集的相互转换。这种方式在网络环境下被进一步延伸,任何网络两端的字符信息也需要根据字符集的设置转换成可接受的内容。

数据库中的字符集编码问题

流行的关系数据库系统都支持数据库字符集编码,也就是说在创建数据库时可以指定它自己的字符集设置,数据库的数据以指定的编码形式存储。当应用程序访问数据时,在入口和出口处都会有字符集编码的转换。对于中文数据,数据库字符编码的设置应当保证数据的完整性。GB2312、GBK、UTF-8 等都是可选的数据库字符集编码;当然我们也可以选择 ISO8859-1 (8-bit),只是我们得在应

用程序写数据之前先将 16Bit 的一个汉字或 Unicode 拆分成两个 8-bit 的字符,读数据之后也需要将两个字节合并起来,同时还要判别其中的 SBCS 字符,因此我们并不推荐采用 ISO8859-1 作为数据库字符集编码。这样不但没有充分利用数据库自身的字符集编码支持,而且同时也增加了编程的复杂度。编程时,可以先用数据库管理系统提供的管理功能检查其中的中文数据是否正确。

PHP 程序在查询数据库之前,首先执行 mysql_query("SET NAMES xxxx"); 其中 xxxx 是你网页的编码(charset=xxxx),如果网页中 charset=utf8,则 xxxx=utf8,如果网页中 charset=gb2312,则xxxx=gb2312,几乎所有 WEB 程序,都有一段连接数据库的公共代码,放在一个文件里,在这文件里,加入 mysql_query("SET NAMES xxxx") 就可以了。

SET NAMES 显示客户端发送的 SQL 语句中使用什么字符集。因此,SET NAMES 'utf-8' 语句告诉服务器“将来从这个客户端传来的信息采用字符集 utf-8”。它还为服务器发送回客户端的结果指定了字符集(例如,如果你使用一个 SELECT 语句,它表示列值使用了什么字符集)。

定位问题时常用的技巧

定位中文编码问题通常采用最笨的也是最有效的办法―在你认为有嫌疑的程序处理后打印字符串的内码。通过打印字符串的内码,你可以发现什么时候中文字符被转换成 Unicode,什么时候Unicode 被转回中文内码,什么时候一个中文字成了两个 Unicode 字符,什么时候中文字符串被转成了一串问号,什么时候中文字符串的高位被截掉了……

取用合适的样本字符串也有助于区分问题的类型。如:"aa啊 aa?@aa" 等中英相间,GB、GBK特征字符均有的字符串。一般来说,英文字符无论怎么转换或处理,都不会失真(如果遇到了,可以尝试着增加连续的英文字母长度)。

解决各种应用的乱码问题

1) 使用 标签设置页面编码

这个标签的作用是声明客户端的浏览器用什么字符集编码显示该页面,xxx 可以为 GB2312、GBK、UTF-8(和 MySQL 不同,MySQL 是 UTF8)等等。因此,大部分页面可以采用这种方式来告诉浏览器显示这个页面的时候采用什么编码,这样才不会造成编码错误而产生乱码。但是有的时候我们会发现有了这句还是不行,不管 xxx 是哪一种,浏览器采用的始终都是一种编码,这个情况我后面会谈到。

举报

  • 相关推荐
  • 瓴羊Dataphin 智能升级:编码难题一扫光,开发运维更高效!

    Dataphin V5.1.2智能版本推出三大核心功能:1)智能编码助手:通过自然语言交互自动生成SQL代码,支持代码补全和结构化输出,提升开发效率;2)智能运维助手:提供任务状态可视化监控、异常诊断和一键重跑功能,实现全链路运维管理;3)智能分析助手:基于分析专辑构建自然语言查询系统,支持多轮追问和SQL自由编辑,让非技术人员也能快速获取数据洞察。新版本通过AI技术重构数据开发体验,实现"会写、能懂、秒查"的智能化目标,满足从开发到分析的全场景需求。

  • 字节、腾讯、阿里,AI 编码“三国杀”

    大厂正在集火最具PMF(产品市场契合度)价值的赛道——AI编码。 从7月21日开始,字节、腾讯、阿里轮番更新AI编码产品和模型:字节已有的AI编码产品Trae放出Solo版本,加入上下文工程,让平台变得更“聪明”;腾讯则把一整套用来部署产品的工具放到其中,做了个“全栈工程师”;阿里更是发布编程大模型Qwen3-Coder剑指Claude4,直接从模型层下功夫。 在Cursor面向中国市场取消了An

  • 曝iPhone 17 Pro要涨价:苹果扛不住了

    当地时间7月30日,美国总统特朗普发文称,自8月1日起,美国将对来自印度的商品征收25%的关税。 分析师称,若25%的关税生效,苹果的净利润将会受到重大影响,因为印度约占iPhone总出货量的20%,其中大部分销往美国,价值约400亿美元。 更严重的是,短期内苹果无处可去,只能承担关税带来的负面影响,如今要在美国大规模组装iPhone几乎不可能,而且可能需要数十年才能实�

  • iPhone 17 Pro橙色机模曝光 全系所有配色揭晓

    ​近日,知名科技博主Sonny Dickson提前晒出iPhone17系列四款机型全配色方案及核心设计细节。据披露,该系列在延续经典黑白基调的同时,首次引入多款鲜明配色:iPhone17Pro系列提供黑、白、蓝、橙四色,其中橙色以高饱和度成为最抢眼选项;iPhone17Air推出黑、白、浅金、天蓝四款清新配色;标准版iPhone17则包含黑、白、浅蓝及粉色,满足多元化审美需求。 工业设计层面,iPhone17系列�

  • iPhone 17 Pro橙色机模上手:最鲜艳的苹果手机

    博主Majin Bu带来了iPhone 17 Pro橙色机模的上手视频。对比网络渲染图,iPhone 17 Pro橙色机模的饱和度要低。 据悉,iPhone 17 Pro提供橙色、银色、钛灰和蓝色四种配色,其中橙色是4款配色中辨识度最高、颜色最鲜艳的一款。 这次iPhone 17 Pro配备了三颗4800万像素摄像头,采用横向大矩阵DECO设计,LED闪光灯与LiDAR扫描仪位居右侧,是苹果近年来变化最大的一款。

  • iPhone 17系列4款手机壳出炉:Pro版变化最大

    有博主在社交平台上分享了iPhone 17系列第三方MagSafe保护壳,这些保护壳对应的机型分别是iPhone 17、iPhone 17 Air、iPhone 17 Pro和iPhone 17 Pro Max。 其中iPhone 17 Pro和17 Pro Max的保护壳有了明显变化,这两款机型的圆环都有一个缺口,而iPhone 17和iPhone 17 Air的MagSafe设计与前代iPhone机型没有变化。 据悉,iPhone 17 Pro系列的后置摄像头模组更大,背面的苹果Logo位置下移,新的MagSafe手机壳专门�

  • iPhone 17 Pro所有配色全部曝光:橙色最吸睛

    博主Majin Bu在社交平台上晒出了iPhone 17 Pro的镜头盖板,一共有4款配色,分别是橙色、银色、钛灰和蓝色,其中橙色的辨识度最高。 基于曝光的镜头盖板,博主还绘制了iPhone 17 Pro的四款配色渲染图,这是苹果史上变化最大的iPhone。 如图所示,iPhone 17 Pro采用横向大矩阵设计,后置三摄位置在左侧,闪光灯和LIDAR激光雷达扫描仪位于矩阵相机右侧,外观接近小米11 Ultra。

  • OpenAI发布ChatGPT Agent智能体:支持写代码、做PPT、分析金融

    OpenAI推出ChatGPT智能体,整合网页交互、数据搜索与多模态协作功能,可完成代码生成、PPT制作、金融分析等复杂任务。该智能体融合Operator的网页自动化操作、Deep Research的数据分析能力及优化后的GPT-4对话引擎三大核心模块。目前面向付费用户开放,Pro版近乎无限使用,其他版本每月限50次任务。OpenAI承认其仍存在金融建模需人工验证、非英语文本解析准确率低等技术局限,并

  • 撞头“卡卡西”的本田核心工程师发中文感谢:原来还是健身大佬

    本月初,本田汽车的一位工程师因发型过于犀利,形似《火影》里的旗木卡卡西而在网上走红。 嗅觉还算是灵敏的本田总算是让该工程师出来营业”了,原来这名工程师名字为大馆正太郎。 虽然顶着一头犀利的杀马特发型,但是个不折不扣的大佬,手握250 项专利,而且还是健身达人,可卧推170公斤5次。 在本田发布的视频里,大馆正太郎用中文向中国网友问好,并表达了自

  • iPhone17 Pro支持8倍光学变焦 或迎相机重大升级

    近日,有爆料者透露某家电影公司正在制作iPhone17Pro的广告,同时还爆料了这款手机诸多令人瞩目的核心功能与特性。 在相机功能方面,iPhone17Pro将迎来显著升级。其中,长焦镜头升级堪称一大亮点,它支持8倍光学变焦,要知道iPhone16Pro仅支持5倍光学变焦,而且能在不同焦距下实现连续光学变焦,这无疑将为用户带来更强大的远距离拍摄能力,仿佛给手机装上了“望远镜”。

今日大家都在搜的词: