加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

详解PHP中的mb_detect_encoding函数使用方法

发布时间:2020-12-13 02:49:48 所属栏目:PHP教程 来源:网络整理
导读:《PHP实例:详解PHP中的mb_detect_encoding函数使用方法》要点: 本文介绍了PHP实例:详解PHP中的mb_detect_encoding函数使用方法,希望对您有用。如果有疑问,可以联系我们。 PHP实战 php中可以使用 mb_detect_encoding() 函数来判断字符串是什么编码的. PH

《PHP实例:详解PHP中的mb_detect_encoding函数使用方法》要点:
本文介绍了PHP实例:详解PHP中的mb_detect_encoding函数使用方法,希望对您有用。如果有疑问,可以联系我们。

PHP实战php中可以使用 mb_detect_encoding() 函数来判断字符串是什么编码的.

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

PHP实战代码如下:
?

PHP实战
$encode = mb_detect_encoding($keytitle,array("ASCII","UTF-8","GB2312","GBK","BIG5"));
if($encode == "UTF-8"){
  $keytitle = iconv("UTF-8",$keytitle);
}

PHP实战这段代码的作用是检测字符串的编码是否UTF-8,是的话就转换为GBK.
可是当 $keytitle = “%D0%BE%C6%AC”;时.检测结果却是UTF-8.这个bug其实不算是bug,写程序时也不应当过于依赖mb_detect_encoding,当字符串较短时,检测结果产生偏差的可能性很大.
解决方法,代码如下:
?

PHP实战
$encode = mb_detect_encoding($keytitle,"UTF-8");

PHP实战三个参数分别是:被检测的输入变量、编码方式的检测顺序(一旦为真,后面自动忽略)、strict模式对编码检测的顺序进行调整,将最大可能性放在前面,这样减少被错误转换的机会.
一般要先排gb2312,当有GBK和UTF-8时,必要将常用的排列到前面.

PHP实战PHP字符串编码的转换和判断

PHP实战
GBK 和 UTF-8 编码的转换是一个非常恶心的事情,比如像 PHP 中的 json_encode 自己根本不支持 GBK 形式的编码.有两个库函数能够支持编码的转换,通常能够想到的就是 iconv 函数,使用起来也非常爽:
?
iconv('GBK','UTF-8//IGNORE','测试字符串'); // 将字符串由 GBK 编码转换为 UTF-8 编码

PHP实战但 iconv 只能办理编码预先知道的情况,如果字符串编码未知,则需要先探测其编码,这时可能会用到 mb_string 扩展库:
?
mb_detect_encoding('测试字符串');

PHP实战可是 mb_detect_encoding 存在一个硬伤,经常出现判断不准确的情况.或许这样就可以办理:

PHP实战?

PHP实战
// 使用 iconv 转换并判断是否等值,效率不高
function is_utf8 ($str) {
  if ($str === iconv('UTF-8',$str)) {
    return 'UTF-8';
  }
}
// 多种编码的情况
function detect_encoding ($str) {
  foreach (array('GBK','UTF-8') as $v) {
    if ($str === iconv($v,$v . '//IGNORE',$str)) {
      return $v;
    }
  }
}

PHP实战通过以上方式得到字符串编码信息后,就可以利用 iconv 或 mb_convert_encoding 来转换编码了.

PHP实战Call to undefined function mb_detect_encoding()错误办理

PHP实战
Windows系统下:
一、Fatal error: Call to undefined function: iconv() in C:Program FilesAppServwww...xxx.php on line 82
php中有个iconv()函数用来进行字符编码转换
在php.ini文件中同样存在extension=php_iconv.dll
这样的声明才能保证这个函数正常使用
如果在php.ini文件中的extension=php_iconv.dll前面有分号
表示被注释掉了,如果存在分号就要去掉,并重新启动服务器
再次运行程序才能办理

PHP实战二、Fatal error: Call to undefined function: mb_detect_encoding() in C:Program FilesAppServwww...xxx.php on line 1355
1、找到php扩展目录(我的php扩展目录的路径是:C:Program FilesAppServphpextensions)
???? 在extensions目录下面找到php_mbstring.dll文件,
2、将php_mbstring.dll这个文件拷贝到php.ini文件所在的目录下(我的php.ini文件所在的目录:C:WINDOWS)
3、用记事本打开php.ini文件,使用快捷键Ctrl+F查找extension=php_mbstring.dll
4、 如果php.ini文件中存在extension=php_mbstring.dll,去掉该行extension前面的分号,
????? 如果不存在,就在其他extension=...的下一行加入extension=php_mbstring.dll,
????? 最终记得保留php.ini文件
5.?? 重新启动你的Apache服务器

PHP实战刚刚发现其实不拷贝php_mbstring.dll这个文件到php.ini所在目录也行

PHP实战Linux系统下:

PHP实战出现下面问题时:

PHP实战PHP?? 1. {main}() /home/xu/web/whois/ab.cn.php:0
PHP?? 2. base_func->is_exist() /home/xu/web/whois/ab.cn.php:21
PHP?? 3. strftime() /home/xu/web/whois/whois.mysql.php:46
ab.cnis exist<br />PHP Fatal error:? Call to undefined function mb_detect_encoding() in /home/xu/web/whois/whois.main.php on line 98
在网上查找了各种资料后才知道本来是php-mbstring这个php插件没有安装(有些同学可能是没有在php.ini中起用此插件),写下此段文件以作笔记.

PHP实战??? 首先使用yum或者apt安装mbstring.so,使用命令:yum install php-mbstring或者apt-get install php-mbstring (ubuntu用户最好使用apt-cache search mbstring搜索一番后再安装,软件名字可能有误)

PHP实战??? 然后修改php.ini:执行vim /etc/php.ini,加入extension="/usr/lib/php/modules/mbstring.so"内容,后面的路径可能不一样,根据mbstring.so存放的目录做相应的修改即可.一般是不用变动的.

欢迎参与《PHP实例:详解PHP中的mb_detect_encoding函数使用方法》讨论,分享您的想法,编程之家 52php.cn为您提供专业教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读