mb_internal_encoding('UTF-8')
ne fait rien par lui-même, il définit uniquement le paramètre d'encodage par défaut pour chaquemb_
une fonction. Si vous n'utilisez aucunmb_
fonction, cela ne fait aucune différence. Si c'est le cas, il est logique de le définir afin que vous n'ayez pas à passer le$encoding
paramètre à chaque fois individuellement.- IMO
mb_detect_encoding
est la plupart du temps inutile car il est fondamentalement impossible de détecter avec précision l'encodage d'un texte inconnu. Vous devez soit savoir dans quel encodage se trouve un blob de texte parce que vous avez une spécification à ce sujet, soit vous devez analyser les métadonnées appropriées comme les en-têtes ou les balises méta où l'encodage est spécifié. - Utilisation de
mb_check_encoding
vérifier si un blob de texte est valide dans l'encodage dans lequel vous vous attendez est généralement suffisant. Si ce n'est pas le cas, supprimez-le et générez une erreur appropriée. -
Concernant :
Si vous manipulez des chaînes contenant des caractères multioctets, alors oui, vous devez utiliser le
mb_
fonctions pour éviter d'obtenir des résultats erronés. Les fonctions de chaîne de base ne fonctionnent qu'au niveau de l'octet, pas au niveau du caractère, ce que vous voulez généralement lorsque vous travaillez avec des chaînes. utf8_general_ci
vsutf8_bin
ne fait une différence que lors de la collecte , c'est-à-dire trier et comparer des chaînes. Avecutf8_bin
les données sont traitées sous forme binaire, c'est-à-dire que seules les données identiques sont identiques. Avecutf8_general_ci
une certaine logique est appliquée, par ex. "é" est trié avec "e" et les majuscules sont considérées comme égales aux minuscules.