php教程 php手册 详解PHP中的mb_detect_encoding函数使用方法

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

Jun 06, 2016 pm 07:48 PM
php

这篇文章主要介绍了详解PHP中的mb_detect_encoding函数使用方法,包括对字符串编码的转换和判断以及Call to undefined function 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。
可是当 $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时,需要将常用的排列到前面。

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


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

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

可是 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()错误解决


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

二、Fatal error: Call to undefined function: mb_detect_encoding() in C:\Program Files\AppServ\www\...\xxx.php on line 1355
1、找到php扩展目录(我的php扩展目录的路径是:C:\Program Files\AppServ\php\extensions)
     在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_mbstring.dll这个文件到php.ini所在目录也行

Linux系统下:

出现下面问题时:

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
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中起用此插件),写下此段文件以作笔记。

    首先使用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存放的目录做相应的修改即可。一般是不用更改的。

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

CakePHP 프로젝트 구성 CakePHP 프로젝트 구성 Sep 10, 2024 pm 05:25 PM

이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP 날짜 및 시간 CakePHP 날짜 및 시간 Sep 10, 2024 pm 05:27 PM

cakephp4에서 날짜와 시간을 다루기 위해 사용 가능한 FrozenTime 클래스를 활용하겠습니다.

CakePHP 파일 업로드 CakePHP 파일 업로드 Sep 10, 2024 pm 05:27 PM

파일 업로드 작업을 위해 양식 도우미를 사용할 것입니다. 다음은 파일 업로드의 예입니다.

CakePHP 토론 CakePHP 토론 Sep 10, 2024 pm 05:28 PM

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

CakePHP 라우팅 CakePHP 라우팅 Sep 10, 2024 pm 05:25 PM

이번 장에서는 라우팅과 관련된 다음과 같은 주제를 학습하겠습니다.

CakePHP 데이터베이스 작업 CakePHP 데이터베이스 작업 Sep 10, 2024 pm 05:25 PM

CakePHP에서 데이터베이스 작업은 매우 쉽습니다. 이번 장에서는 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 이해하겠습니다.

CakePHP 유효성 검사기 만들기 CakePHP 유효성 검사기 만들기 Sep 10, 2024 pm 05:26 PM

컨트롤러에 다음 두 줄을 추가하면 유효성 검사기를 만들 수 있습니다.

See all articles