Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie die Funktion mb_detect_encoding in PHP

So verwenden Sie die Funktion mb_detect_encoding in PHP

不言
不言Original
2018-06-13 15:03:022801Durchsuche

In diesem Artikel wird hauptsächlich die Verwendung der Funktion mb_detect_encoding in PHP ausführlich erläutert, einschließlich der Konvertierung und Beurteilung der Zeichenfolgencodierung sowie der Lösung für den Fehler beim Aufruf der undefinierten Funktion mb_detect_encoding(). Freunde in Not können sich darauf beziehen

Sie können die Funktion mb_detect_encoding() in PHP verwenden, um die Kodierung eines Strings zu bestimmen.

Bei der Verwendung der Funktion mb_detect_encoding in PHP zur Codierungsidentifizierung sind viele Menschen auf das Problem einer falschen Codierung gestoßen, z. B. GB2312 und UTF-8 oder UTF-8 und GBK (hauptsächlich hier) In Bezug auf die Beurteilung von cp936) Im Internet heißt es, dass sich mb_detect_encoding aufgrund kurzer Zeichen verfehlt.

Der Code lautet wie folgt:

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

Die Funktion dieses Codes besteht darin, zu erkennen, ob die Codierung der Zeichenfolge UTF ist -8. Wenn ja, in GBK konvertieren.
Aber wenn $keytitle = „%D0%BE%C6%AC“; Das Erkennungsergebnis ist UTF-8. Dieser Fehler ist eigentlich kein Fehler, und Sie sollten sich beim Schreiben von Programmen nicht zu sehr auf mb_detect_encoding verlassen. Wenn die Zeichenfolge kurz ist, sind die Erkennungsergebnisse wahrscheinlich verzerrt.
Lösung, der Code lautet wie folgt:

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

Die drei Parameter sind: die erkannte Eingabevariable, die Erkennungsreihenfolge der Codierungsmethode (Sobald dies zutrifft, wird Folgendes automatisch ignoriert.) Der strikte Modus passt die Reihenfolge der Codierungserkennung an und stellt die größte Möglichkeit an die erste Stelle, wodurch die Wahrscheinlichkeit einer falschen Konvertierung verringert wird.
Im Allgemeinen sollte gb2312 zuerst sortiert werden. Wenn es GBK und UTF-8 gibt, müssen die häufig verwendeten zuerst sortiert werden.

Konvertierung und Beurteilung der PHP-String-Kodierung

Die Konvertierung von GBK- und UTF-8-Kodierung ist eine sehr widerliche Sache, zum Beispiel funktioniert json_encode selbst in PHP nicht Alle Unterstützt die GBK-Formatkodierung. Es gibt zwei Bibliotheksfunktionen, die die Kodierungskonvertierung unterstützen können. Die iconv-Funktion, die mir normalerweise in den Sinn kommt, macht sehr viel Spaß:
iconv('GBK', 'UTF-8//IGNORE', 'test string'); /Konvertieren Sie die Zeichenfolge von der GBK-Codierung in die UTF-8-Codierung

Iconv kann jedoch nur die Situation lösen, in der die Codierung im Voraus bekannt ist. Wenn die Zeichenfolgencodierung unbekannt ist, müssen Sie möglicherweise zuerst ihre Codierung ermitteln In diesem Fall wird die mb_string-Erweiterungsbibliothek verwendet:
mb_detect_encoding('test string');

MB_detect_encoding weist jedoch einen Fehler auf und es kommt häufig zu ungenauen Beurteilungen. Vielleicht kann dies gelöst werden:

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

Nachdem Sie die String-Codierungsinformationen mit der oben genannten Methode erhalten haben, können Sie iconv oder mb_convert_encoding verwenden, um die Codierung zu konvertieren.

Fehlerbehebung beim Aufruf der undefinierten Funktion mb_detect_encoding()

Unter Windows-System:
1. Schwerwiegender Fehler: Aufruf der undefinierten Funktion: iconv() in C:Program FilesAppServwww...xxx.php in Zeile 82
Es gibt eine iconv()-Funktion in PHP für die Zeichenkodierungskonvertierung
Extension=php_iconv.dll existiert auch in der php.ini-Datei
Eine solche Anweisung kann die normale Verwendung dieser Funktion sicherstellen
Wenn vor extension=php_iconv.dll in der php.ini-Datei ein Semikolon steht
, bedeutet dies, dass es auskommentiert ist Semikolon, entfernen Sie es und starten Sie den Server neu
und führen Sie das Programm erneut aus, um das Problem zu lösen

2. Schwerwiegender Fehler: Aufruf der undefinierten Funktion: mb_detect_encoding() in C:Program FilesAppServwww...xxx.php online 1355
1. PHP-Erweiterungsverzeichnis gefunden (der Pfad meines PHP-Erweiterungsverzeichnisses ist: C:Program FilesAppServphpextensions)
Suchen Sie die Datei php_mbstring.dll im Erweiterungsverzeichnis,
2. Kopieren Sie den php_mbstring. dll-Datei in das Verzeichnis, in dem sich die php.ini-Datei befindet (das Verzeichnis, in dem sich meine php.ini-Datei befindet: C:WINDOWS)
3. Öffnen Sie die php.ini-Datei mit Notepad und verwenden Sie die Tastenkombination Strg+ F, um extension=php_mbstring.dll zu finden
4. Wenn php extension=php_mbstring.dll in der .ini-Datei vorhanden ist, entfernen Sie das Semikolon vor der Erweiterungszeile,
Wenn es nicht existiert, fügen Sie extension=php_mbstring hinzu .dll in die nächste Zeile mit der anderen Erweiterung=...,
Denken Sie zum Schluss daran, die php.ini-Datei zu speichern
5. Starten Sie Ihren Apache-Server neu

Ich habe gerade herausgefunden, dass es nicht funktioniert Wenn Sie die Datei php_mbstring.dll nicht in das Verzeichnis kopieren, in dem sich php.ini befindet

Linux Unter dem System:

Wenn das folgende Problem auftritt:

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 Schwerwiegender Fehler: Aufruf zur undefinierten Funktion mb_detect_encoding() in /home/xu/web/whois/whois.main.php in Zeile 98
Ich habe verschiedene Online-Suchen durchgeführt. Nachdem ich die Informationen gesammelt hatte, stellte ich fest, dass das PHP-Plugin php-mbstring nicht vorhanden war installiert (einige Schüler haben dieses Plug-in möglicherweise nicht in php.ini aktiviert. Ich habe diese Datei für Notizen geschrieben).

Verwenden Sie zuerst yum oder apt, um mbstring.so zu installieren, verwenden Sie den Befehl: yum install php-mbstring oder apt-get install php-mbstring (Ubuntu-Benutzer verwenden am besten apt-cache search mbstring, um vor der Installation zu suchen . Der Softwarename ist möglicherweise falsch)

Dann ändern Sie php.ini: Führen Sie vim /etc/php.ini aus und fügen Sie den Inhalt extension="/usr/lib/php/modules/mbstring.so" hinzu. Die folgenden Pfade können je nach mbstring unterschiedlich sein .so Nehmen Sie einfach die entsprechenden Änderungen am Verzeichnis vor. Im Allgemeinen besteht keine Notwendigkeit, es zu ändern.

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

So lösen Sie das Problem, dass PHP mkdir() keine Schreibberechtigungen hat

So implementieren Sie die PHPInfo-Systemansichtsparameterfunktion

Über die Verwendung von PHP Artisan Migrate unter Laravel 5.1

Das obige ist der detaillierte Inhalt vonSo verwenden Sie die Funktion mb_detect_encoding in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn