2013-07-30 10 views
5

Das mbstring-PHP-Modul hat eine strict_detection Einstellung, documented here. Leider ist das Handbuch völlig nutzlos; es sagt nur, dass diese Option "die strenge Codierungserkennung ermöglicht".Was macht mbstring.strict_detection?

Ich habe ein paar Tests und konnte nicht finden, wie irgendwelche der Mbstring-Funktionen davon betroffen sind. mb_check_encoding() und mb_detect_encoding() geben genau dasselbe Ergebnis für gültige und ungültige UTF-8-Eingabe.

(bearbeiten :) Die Option mbstring.strict_detection wurde in PHP 5.1.2 hinzugefügt.

Antwort

5

Ohne den festgelegten Parameter ist die Erkennung der Codierung schneller, aber nicht so genau. Zum Beispiel hatte, wenn Sie einen UTF-8-String mit teilweise UTF-8-Sequenz wie folgt aus:

$s = "H\xC3\xA9ll\xC3"; 
$encoding = mb_detect_encoding($s, mb_detect_order(), false); 

Das Ergebnis der mb_detect_encoding Anruf noch „UTF-8“ sein würde, auch wenn es nicht gültig UTF-8 ist (das letzte Zeichen ist unvollständig).

Aber wenn Sie setzen die strengen Parameter auf true ...

$s = "H\xC3\xA9ll\xC3"; 
$encoding = mb_detect_encoding($s, mb_detect_order(), true); 

Es wäre eine gründlichere Prüfung durchführen, und das Ergebnis dieser Anruf wäre falsch.

+0

Das stimmt, aber die Einstellung von 'mbstring.strict_detection' beeinflusst dieses Verhalten nicht (nicht einmal der Standardwert des Parameters $ strict). – Zilk

+0

Es funktioniert für mich. Mit 'mbstring.strict_detection = On' ist der Standardwert für den Parameter * strict * wahr. Beachten Sie, dass dies nur seit PHP 5.1.2 möglich ist. –

+0

Ah, du hast recht, es beeinflusst 'mb_detect_encoding()' wenn der dritte Parameter fehlt. Ich hatte einen Fehler in meinen Tests. Nur 'mb_check_encoding()' und 'mb_convert_encoding()' sind nicht betroffen. Vielen Dank. – Zilk