Maison  >  Article  >  développement back-end  >  Comment utiliser la fonction mb_detect_encoding en PHP

Comment utiliser la fonction mb_detect_encoding en PHP

不言
不言original
2018-06-13 15:03:022742parcourir

Cet article présente principalement l'explication détaillée de la façon d'utiliser la fonction mb_detect_encoding en PHP, y compris la conversion et le jugement de l'encodage de chaîne et la solution à l'erreur d'appel à la fonction non définie mb_detect_encoding(). Les amis dans le besoin peuvent s'y référer.

Vous pouvez utiliser la fonction mb_detect_encoding() en PHP pour déterminer l'encodage d'une chaîne.

Lors de l'utilisation de la fonction mb_detect_encoding en php pour l'identification du codage, de nombreuses personnes ont rencontré le problème d'un codage incorrect, tel que GB2312 et UTF-8, ou UTF-8 et GBK (principalement ici Concernant le jugement de cp936) , il est dit sur Internet que mb_detect_encoding jugera mal en raison de caractères courts.

Le code est le suivant :

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

La fonction de ce code est de détecter si l'encodage de la chaîne est UTF-8, oui Si c'est le cas, convertissez-le en GBK.
Mais quand $keytitle = « %D0%BE%C6%AC » ; Le résultat de la détection est UTF-8. Ce bug n'est pas réellement un bug, et vous ne devez pas trop vous fier à mb_detect_encoding lors de l'écriture de programmes. Lorsque la chaîne est courte, les résultats de la détection sont susceptibles d'être biaisés.
Solution, le code est le suivant :

$encode = mb_detect_encoding($keytitle, array("ASCII","GB2312","GBK","UTF-8");

Les trois paramètres sont : la variable d'entrée détectée et l'ordre de détection du méthode d'encodage. (Une fois vrai, il sera automatiquement ignoré plus tard). Le mode strict ajuste l'ordre de détection de l'encodage et donne la priorité à la plus grande possibilité, réduisant ainsi le risque de conversion incorrecte.
Généralement, gb2312 doit être trié en premier Lorsqu'il y a GBK et UTF-8, ceux couramment utilisés doivent être triés en premier.

Conversion et jugement de l'encodage de chaîne PHP

La conversion de l'encodage GBK et UTF-8 est une chose très dégoûtante, par exemple, json_encode lui-même en PHP ne fonctionne pas à tous prend en charge l'encodage au format GBK. Il existe deux fonctions de bibliothèque qui peuvent prendre en charge la conversion d'encodage. La fonction iconv qui vient généralement à l'esprit est très amusante à utiliser :
iconv('GBK', 'UTF-8//IGNORE', 'test string'); /Convertir la chaîne de l'encodage GBK en encodage UTF-8

Mais iconv ne peut résoudre que la situation où l'encodage est connu à l'avance. Si l'encodage de la chaîne est inconnu, vous devez d'abord détecter son encodage, ce qui peut. être utilisé dans ce cas, bibliothèque d'extension mb_string :
mb_detect_encoding('test string');

Cependant, mb_detect_encoding a un défaut et des jugements inexacts se produisent souvent. Peut-être que cela peut être résolu :

// 使用 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;
    }
  }
}

Après avoir obtenu les informations d'encodage de chaîne via la méthode ci-dessus, vous pouvez utiliser iconv ou mb_convert_encoding pour convertir l'encodage.

Appel à la fonction non définie Résolution d'erreur mb_detect_encoding()

Sous système Windows :
Erreur fatale : Appel à la fonction non définie : iconv() dans C:Program FilesAppServwww...xxx.php en ligne 82
Il existe une fonction iconv() en php pour la conversion de l'encodage des caractères
Extension=php_iconv.dll existe également dans le fichier php.ini
Une telle déclaration peut garantir l'utilisation normale de cette fonction
S'il y a un point-virgule devant extension=php_iconv.dll dans le fichier php.ini
, cela signifie qu'il est commenté. point-virgule, supprimez-le et redémarrez le serveur
et exécutez à nouveau le programme pour résoudre le problème

2. Erreur fatale : Appel à une fonction non définie : mb_detect_encoding() dans C:Program FilesAppServwww...xxx.php à la ligne 1355
1. Répertoire d'extensions php trouvé (le chemin de mon répertoire d'extensions php est : C:Program FilesAppServphpextensions)
Recherchez le fichier php_mbstring.dll sous le répertoire des extensions,
2. Copiez le php_mbstring. dll dans le répertoire où se trouve le fichier php.ini (le répertoire où se trouve mon fichier php.ini : C:WINDOWS)
3 Ouvrez le fichier php.ini avec le Bloc-notes et utilisez la touche de raccourci Ctrl+F. pour trouver extension=php_mbstring.dll
4. Si php extension=php_mbstring.dll existe dans le fichier .ini, supprimez le point-virgule devant la ligne d'extension,
S'il n'existe pas, ajoutez extension=php_mbstring. dll à la ligne suivante de l'autre extension=...,
Enfin, n'oubliez pas Enregistrez le fichier php.ini
5 Redémarrez votre serveur Apache

Je viens de découvrir que cela ne fonctionne pas sans. copier le fichier php_mbstring.dll dans le répertoire où se trouve php.ini

Linux Sous le système :

Lorsque le problème suivant se produit :

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 existdf250b2156c434f3390392d09b1c9563PHP Erreur fatale : Appel à une fonction non définie mb_detect_encoding( ) dans /home/xu/web/whois/whois.main.php en ligne 98
J'ai effectué diverses recherches en ligne Après avoir collecté les informations, j'ai découvert que le plug-in php php-mbstring n'était pas installé (certains étudiants peuvent je n'ai pas activé ce plug-in dans php.ini). J'ai écrit ce fichier pour les notes.

Utilisez d'abord yum ou apt pour installer mbstring.so, utilisez la commande : yum install php-mbstring ou apt-get install php-mbstring (il est préférable pour les utilisateurs d'Ubuntu d'utiliser apt-cache search mbstring pour effectuer une recherche avant d'installer . Le nom du logiciel est peut-être erroné)

Modifiez ensuite php.ini : exécutez vim /etc/php.ini et ajoutez le contenu extension="/usr/lib/php/modules/mbstring.so". .so Apportez simplement les modifications correspondantes au répertoire. En général, il n'est pas nécessaire de le changer.

Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !

Recommandations associées :

Comment résoudre le problème de PHP mkdir() n'ayant pas d'autorisations en écriture

Comment implémenter la fonction de paramètre d'affichage du système phpinfo

À propos de l'utilisation de php artisan migrate sous laravel 5.1

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn