您的位置:首页 > 编程语言 > PHP开发

php编码的问题及解决办法

2014-03-26 11:51 225 查看
今天在一个群里有人说自己的程序回显时中文都是乱码,但我一直没有遇上这样的问题,

所以我做一个测试

1)ansii.php,保存的编码为ansi

<?php

header('Content-Type:text/html;charset=UTF8');

$lang="测试编码";

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<base target="_blank">

<meta http-equiv="Content-Type" content="text/html; charset=UTF8" />

</head>

<body>

<?echo $lang;?>

</body>

</html>

运行后将会看到

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<base target="_blank">

<meta http-equiv="Content-Type" content="text/html; charset=UTF8" />

</head>

<body>

���Ա���</body>

</html>

2)把ansii.php另存为utf.php,保存的编码为utf-8

<?php

header('Content-Type:text/html;charset=UTF8');

$lang="测试编码";

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<base target="_blank">

<meta http-equiv="Content-Type" content="text/html; charset=UTF8" />

</head>

<body>

<?echo $lang;?>

</body>

</html>

运行结果:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<base target="_blank">

<meta http-equiv="Content-Type" content="text/html; charset=UTF8" />

</head>

<body>

测试编码</body>

</html>

3)把utf8.php中把charset=UTF8改成charset=GBK(共有两处),运行结果如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<base target="_blank">

<meta http-equiv="Content-Type" content="text/html; charset=GBK" />

</head>

<body>

娴嬭瘯缂栫爜</body>

</html>

从上面的结果可以看到php在加载php程序里会把里面的字符按照文件的编码记录到变量里的。所以当文件是ansii码保存时,变量里面的中文已经保存成ansii码方式。如果文件是utf8编码,变量里的中文都会变成utf8。

所以当文件是某种编码时,却要使用另一种编码显示时,会出乱码。

解决方法:

1)程序开发前,选定数据编码格式(包括程序文件,数据库),全部都需要统一。目前来做对于多个语言做得比较好的编码是UTF8

2)程序里尽量不要有多字节文字(如:中文,日语),如果必须引用其它编码可以使用mb_detect_encoding()得到字符串的编码格式,然后再用mb_detect_encoding()转成你需要的编码格式。具体用法可以查看手册.

小知识:

GBK在计算的里与CP936编码是同相的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: