详解PHP中的mb_detect_encoding函数使用方法 |
php中可以使用 mb_detect_encoding() 函数来判断字符串是什么编码的 。 当在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 。 $encode = mb_detect_encoding($keytitle, array("ASCII","GB2312","GBK","UTF-8"); 三个参数分别是:被检测的输入变量、编码方式的检测顺序(一旦为真,后面自动忽略)、strict模式对编码检测的顺序进行调整,将最大可能性放在前面,这样减少被错误转换的机会 。 PHP字符串编码的转换和判断
但 iconv 只能解决编码预先知道的情况,如果字符串编码未知,则需要先探测其编码,这时可能会用到 mb_string 扩展库: 可是 mb_detect_encoding 存在一个硬伤,经常出现判断不准确的情况 。或许这样就可以解决: // 使用 iconv 转换并判断是否等值,效率不高 function is_utf8 ($str) { if ($str === iconv(UTF-8, UTF-8//IGNORE, $str)) { return UTF-8; } } // 多种编码的情况 function detect_encoding ($str) { foreach (array(GBK, UTF-8) as $v) { if ($str === iconv($v, $v . //IGNORE, $str)) { return $v; } } } 通过以上方式得到字符串编码信息后,就可以利用 iconv 或 mb_convert_encoding 来转换编码了 。 Call to undefined function mb_detect_encoding()错误解决
二、Fatal error: Call to undefined function: mb_detect_encoding() in C:\Program Files\AppServ\www\...\xxx.php on line 1355 刚刚发现其实不拷贝php_mbstring.dll这个文件到php.ini所在目录也行 Linux系统下: 出现下面问题时: PHP 1. {main}() /home/xu/web/whois/ab.cn.php:0 首先使用yum或者apt安装mbstring.so,使用命令:yum install php-mbstring或者apt-get install php-mbstring (ubuntu用户最好使用apt-cache search mbstring搜索一番后再安装,软件名字可能有误) 然后修改php.ini:执行vim /etc/php.ini,加入extension="/usr/lib/php/modules/mbstring.so"内容,后面的路径可能不一样,根据mbstring.so存放的目录做相应的修改即可 。一般是不用更改的 。 |