原文:php编码

PHP 页面编码声明与用header或meta实现PHP页面编码的区别
 
 
php的header来定义一个php页面为utf编码或GBK编码

php页面为utf编码
header("Content-type: text/html;
charset=utf-8");

php页面为gbk编码
header("Content-type:
text/html; charset=gb2312");

php页面为big5编码

header("Content-type: text/html; charset=big5");

通常情况以上代码放在php页面的首页


用header或meta实现PHP页面编码的区别
一、页面编码


1. 使用 <META http-equiv="content-type" content="text/html;
charset=xxx"> 标签设置页面编码


这个标签的作用是声明客户端的浏览器用什么字符集编码显示该页面,xxx可以为GB2312,GBK,UTF-8(和MySQL不同,MySQL是
UTF8)等等。因此,大部分页面可以采用这种方式来告诉浏览器显示这个页面的时候采用什么编码,这样才不会造成编码错误而产生乱码。但是有的时候我们会
发现有了这句还是不行,不管xxx是哪一种,浏览器采用的始终都是一种编码,这个情况我后面会谈到。


请注意,<meta>是属于html信息的,仅仅是一个声明,它起作用表明服务器已经把HTML信息传到了浏览器。


2. header("content-type:text/html; charset=xxx");


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


如果括号里面的内容为文中所说那样,那作用和<META>标签基本相同,大家对照第一个看发现字符都差不多的。但是不同的是如果有这段
函数,浏览器就会永远采用你所要求的xxx编码,绝对不会不听话,因此这个函数是很有用的。为什么会这样呢?那就得说说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页面内使用。


同样也留有一个问题,为什么前者就绝对起作用,而后者有时候就不行呢?这就是接下来要谈的Apache的原因了。

3.
AddDefaultCharset


Apache 根目录的 conf
文件夹里,有整个Apache的配置文档httpd.conf。


用文本编辑器打开httpd.conf,第708行(不同版本可能不同)有AddDefaultCharset
xxx,xxx为编码名称。这行代码的意思:设置整个服务器内的网页文件https标头里的字符集为你默认的xxx字符集。有这行,就相当于给每个文件都
加了一行header("content-type:text/html;
charset=xxx")。这下就明白为什么明明meta设置了是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

<META http-equiv="content-type" content="text/html; charset=xxx">

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

至于那句AddDefaultCharset
xxx,要不要注释就仁者见仁了。反正我是注释掉了,不过我写页子也要写header(),便于放到服务器上能正常显示。


二、数据库编码

PHP 程序在查询数据库之前,首先执行 mysql_query(“SET
NAMES xxxx”);其中 xxxx 是你网页的编码(charset=xxxx),如果网页中 charset=utf8,则 xxxx=utf8,如果网页中
charset=gb2312,则xxxx=gb2312,几乎所有WEB程序,都有一段连接数据库的公共代码,放在一个文件里,在这文件里,加入
mysql_query(“set names”)就可以了。

SET NAMES 显示客户端发送的 SQL 语句中使用什么字符集。因此,SET
NAMES 'utf-8'语句告诉服务器“将来从这个客户端传来的信息采用字符集utf-8”。它还为服务器发送回客户端的结果指定了字符集。(例如,如果你使用一
个SELECT语句,它表示列值使用了什么字符集。)

PHP页面编码统一


MySQL数据库编码、html页面编码、PHP或html文件本身编码要全部一致。

  1、MySQL数据库编码:建立数据库时指定编码(如gbk_chinese_ci),建立数据表、建立字段、插入数据时不要指定编码,会自动继承数据库的编码。

数据库连接时,也有编码,可以在连接完数据库后,执行
mysql_query('SET NAMES
gbk');//将gbk换成你的编码,如utf8。

  2、html页面的编码,指的是这一行的设置:
<meta
http-equiv="Content-Type" content="text/html; charset=gbk" />


  3、PHP或html文件本身的编码:用editplus打开php文件或html文件,另存时,选择的编码,如果数据库和页面编码是gbk,则这儿的编码选择ansi;如果数据库和页面编码是utf-8,则这儿也选择utf-8。


  4、另外要注意的是,Javascript或Flash中传递的数据是utf-8编码,如果数据库和页面编码是gbk,要进行转码,然后写入数据库。

iconv('utf-8', 'gbk', $content);

5、在PHP程序中,可以加上一行,来指定PHP源程序的编码:

header('Content-type: text/html; charset=gbk'); 

php编码的更多相关文章

  1. Python编码记录

    字节流和字符串 当使用Python定义一个字符串时,实际会存储一个字节串: "abc"--[97][98][99] python2.x默认会把所有的字符串当做ASCII码来对待,但 ...

  2. URL安全的Base64编码

    Base64编码可用于在HTTP环境下传递较长的标识信息.在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式.此时,采用Base64编码不仅比较简短,同时也具有不可 ...

  3. myeclipse学习总结一(在MyEclipse中设置生成jsp页面时默认编码为utf-8编码)

    1.每次我们在MyEclispe中创建Jsp页面,生成的Jsp页面的默认编码是"ISO-8859-1".在这种情况下,当我们在页面中编写的内容存在中文的时候,就无法进行保存.如下图 ...

  4. Base64编码

    Base64编码 写在前面 今天在做一个Android app时遇到了一个问题:Android端采用ASE对称加密的数据在JavaWeb(jre1.8.0_7)后台解密时,居然解密失败了!经过测试后发 ...

  5. 使用etree.HTML的编码问题

    title: 使用etree.HTML的编码问题 date: 2015-10-07 17:56:47 categories: [Python] tags: [Python, lxml, Xpath] ...

  6. 前端学HTTP之实体和编码

    前面的话 每天都有各种媒体对象经由HTTP传送,如图像.文本.影片以及软件程序等.HTTP要确保它的报文被正确传送,识别.提取以及适当处理.为了实现这些目标,HTTP使用了完善的标签来描述承载内容的实 ...

  7. Android数据加密之Base64编码算法

    前言: 前面学习总结了平时开发中遇见的各种数据加密方式,最终都会对加密后的二进制数据进行Base64编码,起到一种二次加密的效果,其实呢Base64从严格意义上来说的话不是一种加密算法,而是一种编码算 ...

  8. iOS 原生地图地理编码与反地理编码

    当我们要在App实现功能:输入地名,编码为经纬度,实现导航功能. 那么,我需要用到原生地图中的地理编码功能,而在Core Location中主要包含了定位.地理编码(包括反编码)功能. 在文件中导入 ...

  9. 软件工程(C编码实践篇)学习心得

    孟繁琛 + 原创作品转载请注明出处 + <软件工程(C编码实践篇)>MOOC课程 http://mooc.study.163.com/course/USTC-1000002006 软件工程 ...

  10. cmd窗口编码设置

    问题描述:不知道误操作了什么,导致cmd窗口的鼠标显示位置出现错位,如下: 现在要将鼠标位置调整回来. 使用工具:cmd. 操作步骤: 1.查看cmd属性可以看到 可以看到是UTF-8编码格式的,我们 ...

随机推荐

  1. 如何查询一个库文件属于哪个rpm包

    1.如果这个库文件已经存在 使用rpm命令: # rpm -qf  /file/path  (绝对路径) 例如: # rpm -qf /lib/libm.so.6 glibc-2.12-1.47.el ...

  2. C#Windows的HelloWorld

    在MSDN中找到Form类:MSDN-->.NET开发-->.NET Framework SDK 2.0-->Class Library Reference -->System ...

  3. UVa 11045 My T-shirt suits me / 二分图

    二分图建图 判断是否是完全匹配就行 最大流也行 #include <cstdio> #include <cstring> const int MAX = 300; int a[ ...

  4. 基于 SSH 的工具叫 sshfs. sshfs 可以让你在本地直接挂载远程主机的文件系统

    另外一个很赞的基于 SSH 的工具叫 sshfs. sshfs 可以让你在本地直接挂载远程主机的文件系统. $ sshfs -o idmap=user user@hostname:/home/user ...

  5. Dynamic Pivot table wizard SQL Server

    原文 http://www.gyurcit.hu/pivot.html Dynamic Pivot table wizard This stored procedure generate dynami ...

  6. windows live writer插件说明文档(附录网盘地址)

    百度云地址:http://pan.baidu.com/s/1hqnjzjY 1.Screen Capture tool 用于直接在WLWriter中进行截图的一个插件,要配合SnagIt 这个软件使用 ...

  7. golang各版本的变化

    https://golang.org/doc/https://golang.org/doc/go1.6https://golang.org/doc/go1.5https://golang.org/do ...

  8. 在 Visual Studio 2010 中开发和部署 Windows Azure 应用程序

    原文 在 Visual Studio 2010 中开发和部署 Windows Azure 应用程序 在 Visual Studio 2010 中开发和部署 Windows Azure 应用程序 Jim ...

  9. GreenDAO数据库版本升级

    GreenDAO是一款非要流行的android平台上的数据库框架,性能优秀,代码简洁. 初始化数据库模型代码的时候需要使用java项目生成代码,依赖的jar包已经上传到我的资源里了,下载地址如下:ht ...

  10. 阿里巴巴 web前端性能优化进阶路

    Web前端性能优化WPO,相信大多数前端同学都不会陌生,在各自所负责的站点页面中,也都会或多或少的有过一定的技术实践.可以说,这个领域并不缺乏成熟技术理论和技术牛人:例如Yahoo的web站点性能优化 ...