专注于discuz,uchome,dedecms等各类PHP程序仿站(二次开发和模板制作)。

« »
2012-01-17PHP+mysql

12,578 阅读

php编码之mb_detect_encoding使用注意

mb_detect_encoding(PHP 4 >= 4.0.6, PHP 5)

mb_detect_encoding — Detect character encoding

说明

string mb_detect_encoding ( string $str [, mixed $encoding_list = mb_detect_order() [, bool $strict = false ]] )
Detects character encoding in string str.

参数
str

The string being detected.

encoding_list

encoding_list is list of character encoding. Encoding order may be specified by array or comma separated list string.

If encoding_list is omitted, detect_order is used.

strict

strict specifies whether to use the strict encoding detection or not. Default is FALSE.

返回值

The detected character encoding or FALSE if the encoding cannot be detected from the given string.
范例

Example #1 mb_detect_encoding() example
<?php
/* Detect character encoding with current detect_order */
echo mb_detect_encoding($str);

/* ”auto” is expanded according to mbstring.language */
echo mb_detect_encoding($str“auto”);

/* Specify encoding_list character encoding by comma separated list */
echo mb_detect_encoding($str“JIS, eucjp-win, sjis-win”);

/* Use array to specify encoding_list  */
$ary[] = “ASCII”;
$ary[] = “JIS”;
$ary[] = “EUC-JP”;
echo 
mb_detect_encoding($str$ary);
?>

     当在php中使用mb_detect_encoding函数进行编码识别时,很多人都碰到过识别编码有误的问题,例如对与GB2312和UTF- 8,或者UTF-8和GBK(这里主要是对于cp936的判断),网上说是由于字符短是,mb_detect_encoding会出现误判。

例如:

    $encode = mb_detect_encoding($keytitle, array(“ASCII”,’UTF-8′,”GB2312′,”GBK”,’BIG5′));
if ($encode == “UTF-8″){
$keytitle = iconv(“UTF-8″,”GBK”,$keytitle);
}

    这段代码的作用是检测字符串的编码是否UTF-8,是的话就转换为GBK。

可是当 $keytitle  = “%D0%BE%C6%AC”;时。检测结果却是UTF-8.这个bug其实不算是bug,写程序时也不应当过于依赖mb_detect_encoding,当字符串较短时,检测结果产生偏差的可能性很大。

怎么解决呢,我的办法是:

$encode = mb_detect_encoding($keytitle, array(‘ASCII’,'GB2312′,’GBK’,’UTF-8′);

三个参数分别是:被检测的输入变量、编码方式的检测顺序(一旦为真,后面自动忽略)、strict模式

对编码检测的顺序进行调整,将最大可能性放在前面,这样减少被错误转换的机会。

    一般要先排gb2312,当有GBK和UTF-8时,需要将常用的排列到前面。

 

原创文章如转载,请注明:转载自火跃工作室
本文网址:http://www.huoyue.org/mb_detect_encoding

日志信息 »

该日志于2012-01-17 22:55由 火跃 发表在PHP+mysql分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过RSS 2.0订阅这个日志的所有评论。

相关日志 »

  • 暂无相关日志

1条评论

发表评论 »