深入探索基于LAMP的Web开发中的页面编码问题

        在LAMP(Linux+Apache+MySql+PHP)上进行Web开发时,有时候会遇到中文字符串处理时的乱码。要解决这类乱码问题,最好的办法是对LAMP系统的编码处理过程进行深入分析。

        客户端浏览器显示一个页面时采用的编码,是可以由服务器端来决定的。但在服务器端有四种设定页面显示编码的方式,按照它们的优先集,分别是:

1. PHP中的header("content-type:text/html; charset=xxx")函数;

这个函数header()的作用是把括号里面的信息发到http标头。

如果有这段函数,浏览器就会永远采用你所要求的xxx编码,而忽略页面内容中用<META>标签声明的编码。为什么会这样呢?那就得说说HTTPS标头和HTML信息的差别了:

https标头是服务器以HTTP协议传送HTML信息到浏览器前所送出的字串。

因为meta标签是属于html信息的,所以header()发送的内容先到达浏览器,通俗点就是header()的优先级高于meta。假如一个php页面既有header("content-type:text/html; charset=xxx"),又有<META http-equiv="content-type" content="text/html; charset=xxx">,浏览器就只认前者http标头而不认meta了。当然这个函数只能在php页面内使用。


2. PHP的配置文件php.ini中设置的default_charset

在 php.ini 文件中可以定义 php 的默认语言: default_charset = "xxx",xxx为编码名称。这行代码的意思是设置所有 php 的输出页面编码为 xxx。

3. Apache的配置文件httpd.conf中设置的AddDefaultCharset

Apache 根目录的 conf 文件夹里,有整个Apache的配置文档httpd.conf。在这个文件中可以添加一项设置AddDefaultCharset xxx,xxx为编码名称。这行代码的意思:设置整个服务器内的网页文件http标头里的字符集为你默认的xxx字符集。

4. 在一个页面中申明的 <META http-equiv="content-type" content="text/html; charset=xxx"> 标签

这个标签的作用是声明客户端的浏览器用什么字符集编码显示该页面,xxx可以为GB2312,GBK,UTF-8等等。因此,大部分页面可以采用这种方式来告诉浏览器显示这个页面的时候采用什么编码,这样才不会造成编码错误而产生乱码。但是有的时候我们会发现有了这句还是不行,不管xxx是哪一种,浏览器采用的始终都是一种编码,这就是因为有其它优先级更高的方式设置了编码,而导致<META>标签被忽略。


总结:
如果你是web程序员,给你的每个页面都加个header("content-type:text/html; charset=xxx"),保证它在任何服务器都能正确显示,可移植性强。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值