PHP 页面编码声明方法详解(header或meta)

 2 php的header来定义一个php页面为utf编码或GBK编码 
 3 
 4 php页面为utf编码 
 5 header("Content-type: text/html; charset=utf-8"); 
 6 
 7 php页面为gbk编码 
 8 header("Content-type: text/html; charset=gb2312"); 
 9 
10 php页面为big5编码 
11 header("Content-type: text/html; charset=big5"); 
12 
13 一般状况以上代码放在php页面的首页 
14 
15 用header或meta实现PHP页面编码的区别
16 1、页面编码 
17 
18 1. 使用 <META http-equiv="content-type" content="text/html; charset=xxx"> 标签设置页面编码 
19 
20 这个标签的做用是声明客户端的浏览器用什么字符集编码显示该页面,xxx能够为GB2312,GBK,UTF-8(和MySQL不一样,MySQL是 UTF8)等等。所以,大部分页面能够采用这种方式来告诉浏览器显示这个页面的时候采用什么编码,这样才不会形成编码错误而产生乱码。可是有的时候咱们会 发现有了这句仍是不行,无论xxx是哪种,浏览器采用的始终都是一种编码,这个状况我后面会谈到。 
21 
22 请注意,<meta>是属于html信息的,仅仅是一个声明,它起做用代表服务器已经把HTML信息传到了浏览器。 
23 
24 2. header("content-type:text/html; charset=xxx"); 
25 
26 这个函数header()的做用是把括号里面的信息发到http标头。 
27 
28 若是括号里面的内容为文中所说那样,那做用和<META>标签基本相同,你们对照第一个看发现字符都差很少的。可是不一样的是若是有这段 函数,浏览器就会永远采用你所要求的xxx编码,绝对不会不听话,所以这个函数是颇有用的。为何会这样呢?那就得说说HTTPS标头和HTML信息的差 别了: 
29 
30 https标头是服务器以HTTP协议传送HTML信息到浏览器前所送出的字串。 
31 
32 由于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页面内使用。 
33 
34 一样也留有一个问题,为何前者就绝对起做用,然后者有时候就不行呢?这就是接下来要谈的Apache的缘由了。 
35 
36 3. AddDefaultCharset 
37 
38 Apache 根目录的 conf 文件夹里,有整个Apache的配置文档httpd.conf。 
39 
40 用文本编辑器打开httpd.conf,第708行(不一样版本可能不一样)有AddDefaultCharset xxx,xxx为编码名称。这行代码的意思:设置整个服务器内的网页文件https标头里的字符集为你默认的xxx字符集。有这行,就至关于给每一个文件都 加了一行header("content-type:text/html; charset=xxx")。这下就明白为何明明meta设置了是utf-8,可浏览器始终采用gb2312的缘由。 
41 
42 若是网页里有header("content-type:text/html; charset=xxx"),就把默认的字符集改成你设置的字符集,因此这个函数永远有用。若是把AddDefaultCharset xxx前面加个“#”,注释掉这句,并且页面里不含header("content-type…"),那这个时候就轮到meta标签起做用了。 
43 
44 总结: 
45 
46 来个排序 
47 
48 header("content-type:text/html; charset=xxx") 
49 AddDefaultCharset xxx 
50 <META http-equiv="content-type" content="text/html; charset=xxx"> 
51 若是你是web程序员,给你的每一个页面都加个header("content-type:text/html; charset=xxx"),保证它在任何服务器都能正确显示,可移植性强。 
52 
53 至于那句AddDefaultCharset xxx,要不要注释就仁者见仁了。反正我是注释掉了,不过我写页子也要写header(),便于放到服务器上能正常显示。 
54 
55 2、数据库编码 
56 
57 PHP 程序在查询数据库以前,首先执行 mysql_query(“SET NAMES xxxx”);其中 xxxx 是你网页的编码(charset=xxxx),若是网页中 charset=utf8,则 xxxx=utf8,若是网页中 charset=gb2312,则xxxx=gb2312,几乎全部WEB程序,都有一段链接数据库的公共代码,放在一个文件里,在这文件里,加入 mysql_query(“set names”)就能够了。 
58 
59 SET NAMES 显示客户端发送的 SQL 语句中使用什么字符集。所以,SET NAMES 'utf-8'语句告诉服务器“未来从这个客户端传来的信息采用字符集utf-8”。它还为服务器发送回客户端的结果指定了字符集。(例如,若是你使用一 个SELECT语句,它表示列值使用了什么字符集。) 
60 
61 PHP页面编码统一 
62 
63 MySQL数据库编码、html页面编码、PHP或html文件自己编码要所有一致。 
64   一、MySQL数据库编码:创建数据库时指定编码(如gbk_chinese_ci),创建数据表、创建字段、插入数据时不要指定编码,会自动继承数据库的编码。 
65 数据库链接时,也有编码,能够在链接完数据库后,执行 
66 mysql_query('SET NAMES gbk');//将gbk换成你的编码,如utf8。 
67 
68   二、html页面的编码,指的是这一行的设置: 
69 <meta http-equiv="Content-Type" content="text/html; charset=gbk" /> 
70 
71   三、PHP或html文件自己的编码:用editplus打开php文件或html文件,另存时,选择的编码,若是数据库和页面编码是gbk,则这儿的编码选择ansi;若是数据库和页面编码是utf-8,则这儿也选择utf-8。 
72 
73   四、另外要注意的是,Javascript或Flash中传递的数据是utf-8编码,若是数据库和页面编码是gbk,要进行转码,而后写入数据库。 
74 iconv('utf-8', 'gbk', $content); 
75 
76 五、在PHP程序中,能够加上一行,来指定PHP源程序的编码: 
77 header('Content-type: text/html; charset=gbk'); 
相关文章
相关标签/搜索