现在的位置: 首页 > 综合 > 正文

php 字符编码转换

2013年08月30日 ⁄ 综合 ⁄ 共 1994字 ⁄ 字号 评论关闭

MySQL使用4.1以上版本,管他是什么字符集,一律使用默认。不用去设置MySQL。
  然后举个使用GB2312和UTF-8的例子。
  好,你只要保证你的写着INSERT SQL语句的PHP文件编码为GB2312,那么恭喜你,你使用写着SELECT
SQL语句的GB2312编码的PHP文件读取出来的数据也是GB2312的。
  同理,只要你插入数据库的PHP文件是UTF-8编码,那么你录入的就是UTF-8的,读取出来同样使用编码为UTF-8的读取。

  如果我录入为GB2312,显示要使用UTF-8怎么办,如果你的所有PHP文件为UTF-8编码,那么你在INSERT的时候,就必须使用iconv进行编码转换,将str转为GB2312入库,读取也一样,使用iconv转为UTF-8显示。

  你的前端页面使用什么编码,那么你那些字符串已经被该种编码
编过了,所以,尽管入库,他的机器码肯定就是那样的,不管存放在哪里,不管MYSQL指定为何种编码,他在录入数据的时候,并不会对你的数据进行转换。只要保证你的前端录入使用UTF-8,那么你读取的也是UTF-8。

1) 使用 标签设置页面编码
  这个标签的作用是声明客户端的浏览器用什么字符集编码显示该页面,xxx 可以为 GB2312、GBK、UTF-8(和 MySQL
不同,MySQL 是
UTF8)等等。因此,大部分页面可以采用这种方式来告诉浏览器显示这个页面的时候采用什么编码,这样才不会造成编码错误而产生乱码。但是有的时候我们会发现有了这句还是不行,不管
xxx 是哪一种,浏览器采用的始终都是一种编码,这个情况我后面会谈到。
  请注意, 是属于 HTML 信息的,仅仅是一个声明,仅表明服务器已经把 HTML 信息传到了浏览器。
  2) header(”content-type:text/html; charset=xxx”);
  这个函数 header() 的作用是把括号里面的信息发到 http 标头。如果括号里面的内容为文中所说那样,那作用和
标签基本相同,大家对照第一个看发现字符都差不多的。但是不同的是如果有这段函数,浏览器就会永远采用你所要求的 xxx
编码,绝对不会不听话,因此这个函数是很有用的。为什么会这样呢?那就得说说 http 标头和 HTML信息的差别了:
  http 标头是服务器以 http 协议传送 HTML 信息到浏览器前所送出的字串。而 标签是属于 HTML 信息的,所以
header() 发送的内容先到达浏览器,通俗点就是 header() 的优先级高于 (不知道可不可以这样讲)。假如一个 php
页面既有header(”content-type:text/html;charset=xxx”),又有,浏览器就只认前者 http
标头而不认 meta 了。当然这个函数只能在 php 页面内使用。
  同样也留有一个问题,为什么前者就绝对起作用,而后者有时候就不行呢?这就是接下来要谈的Apache
的原因了。   

   
3) AddDefaultCharset
  Apache 根目录的 conf 文件夹里,有整个 Apache 的配置文档 httpd.conf。
  用文本编辑器打开 httpd.conf,第 708 行(不同版本可能不同)有 AddDefaultCharset
xxx,xxx为编码名称。这行代码的意思:设置整个服务器内的网页文件 http 标头里的字符集为你默认的
xxx字符集。有这行,就相当于给每个文件都加了一行 header(”content-type:text/html;
charset=xxx”)。这下就明白为什么明明 设置了是 utf-8,可浏览器始终采用 gb2312 的原因。
  如果网页里有 header(”content-type:text/html;
charset=xxx”),就把默认的字符集改为你设置的字符集,所以这个函数永远有用。如果把 AddDefaultCharset
xxx 前面加个”#”,注释掉这句,而且页面里不含 header(”content-type…”),那这个时候就轮到 meta
标签起作用了。
  下面列出以上的优先顺序:
  .. header(”content-type:text/html; charset=xxx”)
  .. AddDefaultCharset xxx
  ..
 如果你是 web
程序员,建议给你的每个页面都加个header(”content-type:text/html;charset=xxx”),这样就可以保证它在任何服务器都能正确显示,可移植性也比较强。

    4) php.ini
中的 default_charset 配置:
   php.ini 中的 default_charset = “gb2312″ 定义了 php
的默认语言字符集。一般推荐注释掉此行,让浏览器根据网页头中的 charset
来自动选择语言而非做一个强制性的规定,这样就可以在同台服务器上提供多种语言的网页服务。

抱歉!评论已关闭.