PHP页面编码声明:用header或meta实现的区别及相关操作

这几种情况之间的区别

PHP页面编码声明:用header或meta实现的区别及相关操作

或者为GBK编码

php页面为utf8编码

字符编码设置为utf-8

php页面为gbk编码

字符编码为gb2312

php页面为big5编码

设置字符编码为big5

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

一.HTML页面转UTF-8编码问题

1.在head后,title前加入一行:

顺序不能错,一定要在

显示的标题有可能是乱码!

2.html文件编码问题:

点击编辑器菜单。选择“文件”。再选择“另存为”。这时能看到当前文件的编码。要确保文件编码是UTF - 8

如果是ANSI,需要将编码改成:UTF-8。

3.HTML文件头BOM问题:

有时会在文件开头加上一个BOM标签

在个BOM标签可能会导致浏览器在显示中文的时候出现乱码。

删除这个BOM标签的方法:

能够借助Dreamweaver打开文件。之后重新进行保存。如此便能够将BOM标签去除。

可以用EditPlus打开文件。在菜单“首选项”中。找到“文件”选项。进入“UTF-8标识”设置。将其设置为“总是删除签名”

然后保存文件,即可以去除BOM标签!

4.WEB服务器UTF-8编码问题:

如果你按以上所列的步骤做了,还是有中文乱码问题,

请检查你的所使用的WEB服务器的编码问题

具体格式可参考apache的配置文件

要是你用的是Nginx。那就把nginx.conf里的:charset设置为utf-8

具体去找到“charset gb2312;”或者类似这样的语句。然后将其改成:“charset utf-8;”

二.PHP页面转UTF-8编码问题

1.在代码开始出加入一行:

字符编码为utf-8

2.PHP文件编码问题

点击编辑器的菜单:“文件”->“另存为”,可以看到当前文件的编码,确保文件编码为:UTF-8,

如果是ANSI,需要将编码改成:UTF-8。

3.PHP文件头BOM问题:

PHP文件一定不可以有BOM标签

否则,会出现session不能使用的情况,并有类似的提示:

警告:session_start() [函数.会话开始]:无法发送会话缓存限制器 - 标头已发送

这是因为执行session_start()时整个页面不能有输出。但由于前PHP页面存在BOM标签。

PHP把这个BOM标签当成是输出了,所以就出错了!

所以PHP页面一定要删除BOM标签

删除这个BOM标签的方法:

1.可以用Dreamweaver打开文件,并重新保存,即可以去除BOM标签!

2.可以用EditPlus打开文件,并在菜单“首选项”->“文件”->"UTF-8标识",设置为:“总是删除签名”,

然后保存文件,即可以去除BOM标签!

4.PHP以附件形式保存文件的时候,UTF-8编码问题:

PHP以附件形式保存文件,文件名必须是GB2312编码,

否则,如果文件名中有中文的话,将是显示乱码:

如果你的PHP本身是UTF-8编码格式的文件,

需要将文件名变量由UTF-8转成GB2312:

将“$filename”从UTF - 8编码转换为GB2312编码

5.截断显示文章标题时,出现乱码或者“?”问号的问题:

一般情况下。当文章标题很长时。会显示一部分标题。会对文章标题进行截断

由于一个UTF-8编码格式的中文字符会占用3个字符宽度,

其宽度为1个字符或2字符

没截取完整,将出现乱码或“?”问号的情况,

用下面的函数截取标题,就不会有问题:

函数名为get_brief_str,它有两个参数,分别是$str和$max_length

echo strlen($str) ."

";

如果字符串的长度大于最大长度

$check_num = 0;

for($i=0; $i < $max_length; $i++)

if(ord($str[$i]) > 128)

$check_num++;

if($check_num % 3 == 0)

将字符串$str从起始位置截取到最大长度$max_length。然后在截取后的字符串末尾加上省略号“...”

elseif($check_num % 3 == 1)

先取字符串$str从起始位置到$max_length + 2的部分。然后在这部分后面加上省略号“...”。

elseif($check_num % 3 == 2)

将字符串$str从开头截取到$max_length加1的位置。然后拼接上省略号“...”

return$str;

三.MYSQL数据库使用UTF-8编码的问题

1.用phpmyadmin创建数据库和数据表

或执行语句:

校对规则为utf8_general_ci

创建数据表时,若该字段用于存放中文,那么要将“整理”设为“utf8_general_ci”。

如果该字段是存放英文或数字的话,默认就可以了。

相应的SQL语句,例如:

CREATETABLE`test` (

`id`INTNOTNULL,

`name`为VARCHAR(10)类型。字符集是utf8。校对规则是utf8_general_ci。不能为空。

PRIMARYKEY( `id` )

) ENGINE=MYISAM ;

2.用PHP读写数据库

在连接数据库之后:

该函数参数依次为主机名、主机用户、主机密码

加入两行:

执行设置字符集为'utf8'的操作//用于读库

执行“set names 'utf8'”的操作 此操作用于写库

就可以正常的读写MYSQL数据库了。

四.JS相关的UTF-8编码问题

1.JS读Cookie的中文乱码问题

进行escape编码

否则JS读到cookie中的中文字符将是乱码。

然而php自身不存在escape函数 于是我们重新编写一个escape函数

functionescape($str)

使用正则表达式在字符串$str中进行匹配。匹配的内容是:由\x80到\xff之间的任意一个字符,或者由\x01到\x7f之间的一个或多个字符组成的内容。匹配结果存储在数组$r中。

$ar = $r[0];

foreach($ar as $k=>$v)

if(ord($v[0]) < 128)

$ar[$k] = rawurlencode($v);

else

将变量$v从UTF - 8编码转换为UCS - 2编码。对转换后的结果进行二进制到十六进制的转换。将转换后的十六进制值前面加上“%u”,并赋值给数组$ar的索引为$k的元素。

returnjoin("",$ar);

JS读cookie的时候,用unescape解码,

然后就解决cookie中有中文乱码的问题了。

2.外部JS文件UTF-8编码问题

当一个HTML页面或则PHP页面包含一个外部的JS文件时,

如果HTML页面或则PHP页面是UTF-8编码格式的文件,

外部的JS文件同样要转成UTF-8的文件,

否则将出现,没有包含不成功,调用函数时没有反应的情况。

点击编辑器的菜单:“文件”->“另存为”,可以看到当前文件的编码,确保文件编码为:UTF-8,

如果是ANSI,需要将编码改成:UTF-8。

五.FLASH相关的UTF-8编码问题

FLASH内部对所有字符串,默认都是以UTF-8处理

1.FLASH读文普通本文件(txt,html)

要将文本文件的编码存为UTF-8

点击编辑器的菜单:“文件”->“另存为”,可以看到当前文件的编码,确保文件编码为:UTF-8,

如果是ANSI,需要将编码改成:UTF-8。

2.FLASH读XML文件

要将XML文件的编码存为UTF-8

点击编辑器的菜单:“文件”->“另存为”,可以看到当前文件的编码,确保文件编码为:UTF-8,

如果是ANSI,需要将编码改成:UTF-8。

在XML第1行写:

3.FLASH读PHP返回数据

如果PHP编码本身是UTF-8的,直接echo就可以了

要是PHP编码本身为GB2312,那么能够把PHP转存成UTF - 8编码格式的文件,直接进行echo操作就行

要是PHP编码自身是GB2312的。并且不允许更改文件的编码格式。

用下面的语句将字符串转换成UTF-8的编码格式

将$str从GB2312编码转换为UTF - 8编码并赋值给$new_str

再echo就可以了

4.FLASH读数据库(MYSQL)的数据

FLASH要通过PHP读取数据库中的数据

PHP自身的编码没那么重要。关键在于要是数据库的编码为GB2312。

需要用下面的语句将字符串转换成UTF-8的编码格式

$new_str = iconv("GB2312", "UTF-8", "$str");

5.FLASH通过PHP写数据

一句话,FLASH传过来的字符串是UTF-8格式的,

又或者直接显示等

还是用iconv函数转换

6.FLASH使用本地编码(理论上不推荐使用)

如果想让FLASH不使用UTF-8编码,而是使用本地编码

对于中国大陆地区而言,本地编码是GB2312或GBK

AS程序内,可以添加以下代码:

System.useCodepage = true;

那么FLASH内所有字符都是使用GB2312的编码了

都应做相应编码转换

因此不推荐使用

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

一、页面编码

1. 使用 标签设置页面编码

这个标签的作用是声明客户端浏览器显示该页面所用的字符集编码。xxx可为GB2312、GBK、UTF-8等(与MySQL不同,MySQL是UTF8)。所以,大部分页面能用这种方式告知浏览器显示此页面时采用的编码。如此才不会因编码错误而产生乱码。但是有时我们会发现,即便有了这句仍不行。不管xxx属于哪一种,浏览器采用的始终是一种编码。这个情况我后面会谈到。

请注意 这属于html信息 它只是一个声明 其作用是表明 服务器已将HTML信息 传至浏览器

字符编码为xxx

函数header()有作用。其作用是将括号里的信息发送到http标头。

如果括号内内容如文中所述,那么其作用与标签基本相同。大家对照第一个查看会发现字符大致相同。但不同之处在于,若有这段函数,浏览器会始终采用你所要求的xxx编码,绝对不会不遵从。所以这个函数很有用。为何会这样呢?这就得讲讲HTTPS标头与HTML信息的差别了:

https标头是服务器送出的字串。这个字串是在以HTTP协议传送HTML信息到浏览器之前送出的。

meta标签属于html信息。header()发送的内容先到达浏览器。通俗来讲,header()的优先级高于meta。不确定是否能这样表述加入一个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是编码名称。这行代码的含义是。将整个服务器内网页文件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标签发挥作用了。

总结:

来个排序

设置字符编码为xxx

AddDefaultCharset xxx

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

至于那句添加默认字符集xxx,是否要注释因人而异。反正我把它注释掉了,不过我写页面时也要写设置头部信息的函数,以便放到服务器上能正常显示

二、数据库编码

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字符集。它还为服务器发送回客户端的结果指定了字符集。它表示列值使用了什么字符集

PHP页面编码统一

这几种编码都要保持一致

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

数据库连接时,也有编码,可以在连接完数据库后,执行

mysql_query('SET NAMES gbk');//把gbk替换成你的编码,比如utf8。

2、html页面的编码,指的是这一行的设置:

用editplus打开php文件。用editplus打开html文件。另存时。选择编码。若数据库和页面编码是gbk。则这儿的编码选择ansi。若数据库和页面编码是utf-8。则这儿也选择utf-8。

另外需要注意,Javascript或Flash传递的数据采用utf-8编码。若数据库和页面编码为gbk,需进行转码,之后写入数据库。

将$content从utf-8编码转换为gbk编码

在PHP程序里 能够添加一行 用以指定PHP源程序的编码

字符编码为gbk

你可能想看:
« 上一篇
下一篇 »

相关推荐

php实时推送,php实地培训

2026年10月05日

53阅读

php乱码出现问号的原因,php乱码出现问号的原因有哪些

2026年10月05日

44阅读

php一句话木马,一句话木马ctf

2026年10月05日

48阅读

php获取数组长度,php中如何获取数组的长度

2026年10月05日

50阅读

php面试题库及答案,php程序员面试真题库

2026年10月05日

47阅读

phpcontent-type修改,php源码二次修改需要多少钱

2026年10月05日

42阅读