文档章节

Apache 中文乱码解决方案

鱼北子
 鱼北子
发布于 2012/08/27 16:20
字数 1341
阅读 247
收藏 2

Apache 中文乱码解决方案

服务器端:
======
修改httpd.conf (在Redhat中放置的位置为/etc/httpd/conf/)
查找:
AddDefaultCharset ISO-8859-1
改成:
#AddDefaultCharset ISO-8859-1
AddDefaultCharset off

这种方式关掉了服务器的默认语言的发送,这样仅凭html文件头中设置的语言来决定网页语言。

很多文章都说通过修改为 AddDefaultCharset GB2312 把缺省语言改成GB2312来解决中文乱码,确实GB2312内码的网页可以正常显示了,但这并非万全之策。因为当你的网页内码不是GB2312,就算你在网页用下面的meta指定了正确的语言,如ISO8859-1,也不会解码为ISO8859-1,因为Apache已经先你一步将GB2312指定为网页的语言了,如下图:

而这个是加了 AddDefaultCharset off 后的:

修改后请重新启动Apache,在Redhat中命令为
/etc/init.d/httpd restart

当使用一些网页脚本引擎,如PHP,还可能需要修改相应的配置文件。
以PHP为例,需要修改php.ini (Red Hat中位置在/etc/)

找到:
default_charset = “iso-8859-1″ 或者类似的,如 default_charset = “gb2312″,将其注释掉:
;default_charset=”iso-8859-1″

客户端:
=====
在中文网页请中依情况在标签中添加:
GB2312:
<META http-equiv=”Content-Type” content=”text/html; charset=gb2312″ />
BIG5:
<META http-equiv=”Content-Type” content=”text/html; charset=big5″ />
UTF-8: (注意是UTF-8,而不是UTF8,我已经上过当了)
<META http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />

如果还是不正常,请清空浏览器的Cache试试。

另外附上goghs的”blog工具中中文的问题“一文的修正版,这篇文章很好的阐述了Charset和Encoding之间的关系。

    blog工具中中文的问题 [Blog] - goghs @ 23:26:56

    现在的blog工具完全中文的并没有,而一般程序的默认,都是使用iso8859-1字符集,或者说en语言编码。字符集(Charset)和编码(Encoding)是两个不同的概念。

    如果你使用MT的默认安装,或者使用B2的默认安装,你会发现你所发布的中文文章根本无法正常显示。(此处的MT的默认安装,以使用MySQL为基准,使用文件的我没有测试,不便评述。)

    原因很简单,所有页面的默认都是iso8859-1字符集,所以在数据插入数据库的时候,都会被编码(成为html实体,如xxx;类型,xxxx此处都是数字)。

    处理的方式并不复杂,对MT而言,你需要将mt.cfg中的NoHTMLEntities以行前面的注释符号去掉,变成
    NoHTMLEntities 1
    一次来禁止使用HTML::Entities进行实体编码。
    然后修改CGI.pm中的一处,设置为正确的gb2312字符集,我在前面的一篇文章中已经谈到。

    并且需要修改所有的模板,将其中的charset从iso8859-1修改为gb2312。

    而对B2,B2config.php里, 第91行有
    # IMPORTANT! set this to 0 if you are using Chinese, Japanese, Korean,
    #or other double-bytes languages
    $use_htmltrans = 0;

    把$use_htmltrans 设定成0就行了。

    编码问题还牵涉到生成的RSS文件。作为XML的一个词汇集(此处翻译成中文似乎很让人搞不清楚,也许直接用Vocabulary更好一点),RSS完全需要遵循XML规范。
    所有的数据中,有5个字符必须进行特殊处理。它们是单引号(’), 双引号(”), 小于号(< ),大于号(>),以及&,因为他们具有特殊的用处和意义。MT中Util模块(Util.pm)中的encode_html函数负责处理,而在PHP中使用htmlspecialchars()函数做的就是同样的工作(注意默认情况下单引号是不被处理的,你需要使用ENT_QUOTES作为第二个参数)。
    对RSS的生成,你只需要使用上述的方法进行处理,就是处理掉5各特殊字符,而千万不要使用MT中的HTMLEntities和PHP中的 htmlentities()函数,因为这样它会将非iso8859-1的字符全部转换成实体,就是xxx;格式。对PHP,虽然4.1版本开始,虽然htmlspecialchars()函数可以通过第三个参数传递一个charset来进行处理,但是以我的简单测试,似乎不行。
    另外需要对RSS指定一个正确的encoding, 就是将默认的
    <?xml version=”1.0″ encoding=”UTF-8″?>
    修改为
    <?xml version=”1.0″ encoding=”GB2312″?>
    (XML这里确实比较糊涂,encoding使用charset)

    关于语言代码和国际代码,有很多复杂的标准,我也没太搞清楚,这里就不说了。总之记住对简体中文,charset = gb2312 或者说更准确的应是 charset = GB2312, encoding = “zh”。其他的不知道也罢。

    在rss生成中,只要你在前面制定了正确的charset, 即使你没有正确设置encoding,其源文件是完全可读的,只是如果你使用浏览器进行浏览时,它会以UTF-8编码显示,因此中文是乱码,只有你正确制定了中文编码后,才可以正确显示(你也可以通过切换浏览器的编码来看)。

    总之这是一个比较复杂的问题,我的能力有限,也只能解释道这一步了。
    仓促中写就,可能有很多错误,请大家指正。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

在配置文件中添加:

    IndexOptions Charset=GB2312

    这样这样就能解决Apache autoindex模块中文乱码问题了。

本文转载自:http://zhumeng8337797.blog.163.com/blog/static/100768914201010655583/

鱼北子

鱼北子

粉丝 23
博文 39
码字总数 7139
作品 0
昌平
技术主管
私信 提问
java PPT 转成PDF,中文乱码解决

ppt转成pdf,原理是ppt转成图片,再用图片生产pdf,过程有个问题,不管是ppt还是pptx,都遇到中文乱码,编程方框的问题,其中ppt后缀网上随便找就有解决方案,就是设置字体为统一字体,pptx如...

KeepMoving
2015/11/09
5.3K
10
msysgit 中文乱码问题解决方法

msysgit安装好后处理中文是有问题的:ls中文目录/文件名乱码;提交中文的log,push到服务器上会乱码;git log查看服务器pull过来的log乱码。 1、ls命令列出的中文目录/文件名正确显示解决方法...

lieefu
2015/07/01
164
0
tortoisegit遇到的乱码问题

1,在folder下面提交+comment,如果comment是中文,服务端会出现乱码; 2,apply patch时,如果patch文件里有中文,会因为乱码问题而apply patch失败。 解决方案:换掉tortoisegit!!!!!...

Solid
2016/03/24
2
0
nginx下无法访问中文文件名的解决方法

今天在网上寻找关于Nginx访问中文目录及文件名的解决方法,偶然看到qwqg的一篇文章! 解决问题的思路很清晰,特转载过来与大家一起分享!该方法还没有亲自测试,所以不太确定是否真有用! 方...

mickelfeng
2015/08/10
909
0
ZABBIX3.0 安装问题记录

今日对ZABBIX3.0进行了安装,安装过程中出现了一些问题,特在此记录被查 问题一: 现象: 使用源代码安装之后, 在ZABBIX的网页上不能使用MYSQL数据库 解决方法: ZABBIX需要php支持mysqli;...

Tevisky
2016/03/16
1.3K
0

没有更多内容

加载失败,请刷新页面

加载更多

npm 发布webpack插件 webpack-html-cdn-plugin

初始化一个项目 npm init 切换到npm源 淘宝 npm config set registry https://registry.npm.taobao.org npm npm config set registry http://registry.npmjs.org 登录 npm login 登录状态......

阿豪boy
33分钟前
55
0
java基础(16)递归

一.说明 递归:方法内调用自己 public static void run1(){ //递归 run1(); } 二.入门: 三.执行流程: 四.无限循环:经常用 无限递归不要轻易使用,无限递归的终点是:栈内存溢出错误 五.递...

煌sir
38分钟前
35
0
REST接口设计规范总结

URI格式规范 URI中尽量使用连字符”-“代替下划线”_”的使用 URI中统一使用小写字母 URI中不要包含文件(脚本)的扩展名 URI命名规范 文档(Document)类型的资源用名词(短语)单数命名 集合(Co...

Treize
今天
57
0
CentOS-配置YUM源加速(阿里云、Nexus3)

备份本地源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 配置CentOS6 $ wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/......

-自由人生-
今天
80
0
我如何获取一周中开始的DateTime?

我如何只知道C#中的当前时间来查找一周的开始(星期日和星期一)? 就像是: DateTime.Now.StartWeek(Monday); #1楼 丑陋,但至少可以给您正确的日期 通过系统设置星期开始时间: publ...

javail
今天
55
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部