1) 使用 标签设置页面编码 我爱电脑技术社区--打造最好的电脑技术自学交流平台+ @% H6 l8 ?" X) t; L% t% D
www.520diannao.com, S7 c9 v5 O% p9 _
我爱电脑技术社区--打造最好的电脑技术自学交流平台% Q4 D: M6 `8 @3 ~0 M- [
这个标签的作用是声明客户端的浏览器用什么字符集编码显示该页面,xxx 可以为 GB2312、GBK、UTF-8(和 MySQL 不同,MySQL 是 UTF8)等等。因此,大部分页面可以采用这种方式来告诉浏览器显示这个页面的时候采用什么编码,这样才不会造成编码错误而产生乱码。但是有的时候我们会发现有了这句还是不行,不管 xxx 是哪一种,浏览器采用的始终都是一种编码,这个情况我后面会谈到。
! h: Q' s. G( p' L: ~ r% y我爱电脑技术论坛. }' ~' Y' {# ~, a& ]. i/ `
打造最好的电脑自学交流论坛# {2 ]/ f# ]2 E! b( L
请注意, 是属于 HTML 信息的,仅仅是一个声明,仅表明服务器已经把 HTML 信息传到了浏览器。 4 T$ R+ R% q: e& ~% Z# \. _
www.520diannao.com* j, Q2 a6 t& N" x) J1 P5 M
# t0 L5 a) N, G3 K X4 G我爱电脑技术社区--打造最好的电脑技术自学交流平台2) header("content-type:text/html; charset=xxx"); ; Z7 ~, K* d, O9 a" J$ }0 o
我爱电脑技术论坛6 {- o7 Y& O3 [2 y
我爱电脑技术社区--打造最好的电脑技术自学交流平台% }! a; j' \4 n/ ]# B; D
这个函数 header() 的作用是把括号里面的信息发到 http 标头。如果括号里面的内容为文中所说那样,那作用和 标签基本相同,大家对照第一个看发现字符都差不多的。但是不同的是如果有这段函数,浏览器就会永远采用你所要求的 xxx 编码,绝对不会不听话,因此这个函数是很有用的。为什么会这样呢?那就得说说 http 标头和 HTML信息的差别了: www.520diannao.com" {& L/ g+ q7 U5 W. w% r
% k" ^) H6 |& ?我爱电脑技术论坛我爱电脑技术论坛4 c( V$ c# a9 s' E2 V
http 标头是服务器以 http 协议传送 HTML 信息到浏览器前所送出的字串。而 标签是属于 HTML 信息的,所以 header() 发送的内容先到达浏览器,通俗点就是 header() 的优先级高于 (不知道可不可以这样讲)。假如一个 php 页面既有header("content-type:text/html;charset=xxx"),又有,浏览器就只认前者 http 标头而不认 meta 了。当然这个函数只能在 php 页面内使用。 我爱电脑技术论坛0 S: X6 h5 n1 Y; D6 o: f/ ?2 ^. X1 H
我爱电脑技术社区--打造最好的电脑技术自学交流平台. n1 z9 l" G; l# L' q8 T g! h9 M
: s8 B, z6 A; twww.520diannao.com同样也留有一个问题,为什么前者就绝对起作用,而后者有时候就不行呢?这就是接下来要谈的Apache 的原因了。 我爱电脑技术论坛. |- `' G4 e$ z3 m2 ]
www.520diannao.com7 g* P8 B5 d3 G
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站9 E- d0 i. h+ R; m' A: @
3) AddDefaultCharset 电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站( d( f0 Y/ K2 S5 f8 Y6 M$ j
电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站 H) ~* T3 H: M" r, B: c
( p8 }1 p2 s( q% @2 A+ z! Y& Z我爱电脑技术论坛Apache 根目录的 conf 文件夹里,有整个 Apache 的配置文档 httpd.conf。
# }: Z0 Q, C( H3 W3 rwww.520diannao.com打造最好的电脑自学交流论坛 b2 C/ T3 r# q, [
5 N7 ^& {" O* B6 H1 R6 O电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站用文本编辑器打开 httpd.conf,第 708 行(不同版本可能不同)有 AddDefaultCharset xxx,xxx为编码名称。这行代码的意思:设置整个服务器内的网页文件 http 标头里的字符集为你默认的 xxx字符集。有这行,就相当于给每个文件都加了一行 header("content-type:text/html; charset=xxx")。这下就明白为什么明明 设置了是 utf-8,可浏览器始终采用 gb2312 的原因。
+ S' W# T/ A* J1 w# E- u8 p$ w1 u# }3 y电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
: D& s6 `/ B' q( x" `, X4 O电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站打造最好的电脑自学交流论坛2 ?& k m2 V/ l' D4 D
如果网页里有 header("content-type:text/html; charset=xxx"),就把默认的字符集改为你设置的字符集,所以这个函数永远有用。如果把 AddDefaultCharset xxx 前面加个"#",注释掉这句,而且页面里不含 header("content-type…"),那这个时候就轮到 meta 标签起作用了。
9 {: E# {0 R: T7 E电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站6 H- g2 W6 M7 F4 s. U
; f/ p O( i, q7 n3 C6 e! B! C我爱电脑技术论坛下面列出以上的优先顺序:
5 z8 |2 C$ e9 b. U我爱电脑技术论坛
0 P# k, p; d2 X5 z$ ?) jwww.520diannao.com我爱电脑技术论坛( W" C# M1 o5 P
.. header("content-type:text/html; charset=xxx") www.520diannao.com0 [; ^3 Y, B* Z5 k# J* e# V
; e+ K2 H2 `1 r, c) b打造最好的电脑自学交流论坛
# w9 ~( K: P' W2 a/ o9 M我爱电脑技术社区--打造最好的电脑技术自学交流平台.. AddDefaultCharset xxx
. K2 \1 R% V. Y我爱电脑技术社区--打造最好的电脑技术自学交流平台
, G, f1 a# i+ m+ [; l% N! S# J5 Q H我爱电脑技术论坛
$ B' f& x" q% a5 _/ O0 O.. 打造最好的电脑自学交流论坛. y; Q6 _+ F# v# ] {
, [6 a- o" J5 t
& E' q" N) }& s" o; Ywww.520diannao.com如果你是 web 程序员,建议给你的每个页面都加个header("content-type:text/html;charset=xxx"),这样就可以保证它在任何服务器都能正确显示,可移植性也比较强。 打造最好的电脑自学交流论坛; h* t# o; i2 a
! e3 C3 q$ O% _3 w, j
' d$ U+ H7 O ^8 R9 Xwww.520diannao.com4) php.ini 中的 default_charset 配置:
4 d$ N3 j+ e" m1 _2 z- J# |电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
4 I, u: a$ [$ z9 a9 {
& u$ d) T/ n4 D& Zphp.ini 中的 default_charset = "gb2312" 定义了 php 的默认语言字符集。一般推荐注释掉此行,让浏览器根据网页头中的 charset 来自动选择语言而非做一个强制性的规定,这样就可以在同台服务器上提供多种语言的网页服务。
2 _! J! U3 B. v" D6 c电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站打造最好的电脑自学交流论坛9 D! s- e6 ^7 O5 {3 ^6 o# M; E% O
5 Y! T2 x) }9 F, S5 w5 ]. G+ ~7 I0 X
结束语
% C6 h N/ B" W7 y' hwww.520diannao.com
' V" m. P7 a, }0 \+ f0 v0 u电脑,技术,IT,学习,交流,网络安全,QQ,硬件,软件,编程,教程,建站
) f. ?' W: [3 n其实 php 开发中的中文编码并没有想像的那么复杂,虽然定位和解决问题没有定规,各种运行环境也各不尽然,但后面的原理是一样的。了解字符集的知识是解决字符问题的基础。不过,随着中文字符集的变化,不仅仅是 php 编程,中文信息处理中的问题还是会存在一段时间的。