重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
用notepad++,可以查看php文件的编码格式,是gbk还是utf8,一般php文件源码里面都有写编码格式,没写的话就用我说的这个软件打开,就能看到源码的格式。
创新互联专业为企业提供兴业网站建设、兴业做网站、兴业网站设计、兴业网站制作等企业网站建设、网页设计与制作、兴业企业网站模板建站服务,10多年兴业做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
编码问题是解码者决定的,数据本身并不指明编码方式,而是读数据的解码者选择自己的解码方式
此处,php程序是数据本身,php解释器是解码者本身,
php解释器对 php程序的编码方式 并不应人类对php程序的编码方式理解不同而转移
因此,理论上不存在获取当前数据编码方式的 接口,只要当时的编码者(譬如人类)显示指明编码方式,
解码者(譬如php解释器)方可获知
即使在解析以后再人类看来是一片乱码, PHP认为一切都是正确的.
当然从前端获取来的字符例外
如果不清楚字符串的编码格式的话,就可以将这段字符这样检查:
$encode = mb_detect_encoding($string, array("ASCII",'UTF-8′,"GB2312′,"GBK",'BIG5′));
echo $encode;
这样就能知道它是什么编码的了。后续操作还可以为其转码:
if ($encode == “UTF-8″){
$string = iconv("UTF-8″,"GBK",$string);
}
$encode = mb_detect_encoding($string, array("ASCII",'UTF-8′,"GB2312′,"GBK",'BIG5′));
echo $encode;
可以用以上代码判断字符串格式,转码的话,使用iconv函数
一般右击查看源文件
meta http-equiv="Content-Type" content="text/html; charset=gb2312" /
头部会有这样的 charset=gb2312"这就是GB2312编码 如果charset=utf-8"就是UTF-8编码
如果没有这句,在IE游览器在页面上可以选择编码,编码前面会有个勾号,如果没有 你选择下UTF-8编码如果显示乱码 那就是GBK编码 如果不乱码 就是UTF-8编码
文件a.txt,用PHP如何判断它的编码是GBK还是UTF-8呢?
1,重新认识一下此问题,当时版主回复的时候我就觉得mb函数里一定有这样的功能,但今日研究了mb库,并没有这样的功能。用mb_detect_encoding总是不准确。
echo mb_detect_encoding(file_get_contents('a.txt'));
2,我在PHP的在线文档中找了一个方法,可以解决你的问题,需要自己编写一个函数来实现。
具体代码如下:
function isUTF8($str)
{
if ($str === mb_convert_encoding(mb_convert_encoding($str, "UTF-32", "UTF-8"), "UTF-8", "UTF-32"))
{
return true;
}
else
{
return false;
}
}
$content = file_get_contents("a.txt");
echo isUTF8($content);
3,经测试,在编码种类不多的情况下,2方法成功率还是挺高的。
function ChickC($str)
{
$array = array('ASCII','GBK','UTF-8');
foreach ($array as $value)
{
if ($str === mb_convert_encoding(mb_convert_encoding($str, "UTF-32", $value), $value, "UTF-32"))
return $value;
}
return false;
}