2013-07-30 4 views
5

Le module PHP mbstring a un paramètre strict_detection, documented here. Malheureusement, le manuel est complètement inutile; il dit seulement que cette option "permet la détection de codage stricte".Que fait mbstring.strict_detection?

J'ai fait quelques tests et je n'ai pas trouvé comment l'une des fonctions mbstring est affectée par cela. mb_check_encoding() et mb_detect_encoding() donnent exactement le même résultat pour l'entrée UTF-8 valide et invalide.

(edit :) L'option mbstring.strict_detection a été ajoutée en PHP 5.1.2.

Répondre

5

Sans le paramètre strict défini, la détection de codage est plus rapide mais ne sera pas aussi précise. Par exemple, si vous aviez une chaîne UTF-8 avec une séquence UTF-8 partielle comme ceci:

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

Le résultat de l'appel mb_detect_encoding serait encore « UTF-8 », même si ce n'est pas valide UTF-8 (le dernier caractère est incomplet).

Mais si vous définissez le paramètre strict true ...

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

Il effectuerait une vérification plus approfondie, et le résultat de cet appel serait faux.

+0

C'est vrai, mais le réglage de 'mbstring.strict_detection' n'affecte pas ce comportement (même pas la valeur par défaut du paramètre $ strict). – Zilk

+0

Cela fonctionne pour moi. Avec 'mbstring.strict_detection = On', la valeur par défaut du paramètre * strict * est true. Notez que ceci n'est disponible que depuis PHP 5.1.2. –

+0

Ah, vous avez raison, ça * affecte * mb_detect_encoding() 'si le troisième paramètre est manquant. J'ai eu une erreur dans mes tests; seulement 'mb_check_encoding()' et 'mb_convert_encoding()' ne sont pas affectés. Je vous remercie. – Zilk