strlen, mb_strlen, lequel utiliser?
Comment puis-je connaître le jeu de caractères dans $_REQUEST ?
et comment définir le jeu de caractères de $_REQUEST ?
OriginalL'auteur lovespring | 2009-09-19
Vous devez vous connecter pour publier un commentaire.
Pour faire court: vous ne savez pas vraiment à propos de l'encodage (jeu de caractères) utilisé sur les variables qui sont passés au script PHP via GET ou POST (surtout OBTENIR est un problème ici). Par convention, les navigateurs les formulaires POSTE à côté serveur, la ressource spécifiée dans la
action
-attribut utilisant le codage de la page qui peuvent être spécifiées par l'intermédiaire d'unhttp-equiv
-meta-tag (charset
-méta-balise HTML5) ou via un en-tête HTTP. Par ailleurs, certains navigateurs respectent également leaccept-charset
-attribut sur le formulaire de choix de l'encodage correct.L'encodage des paramètres GET et l'URL elle-même dépend du navigateur stettings et peut donc être contrôlé par l'utilisateur. Vous ne devriez pas compter sur un codage spécifique.
En général, vous allez faire le tour de la plupart des codant pour des problèmes liés par l'utilisation systématique de l'UTF-8 pour tout et en spécifiant l'encodage correct dans le HTTP en-tête (
Content-Type: text/html; charset=UTF-8
) - cela donnera le bon encodage (UTF-8) dans toutes les variables qui sont passés dans votre chaîne (nous ne parlons pas de rouge scripts délibérément essaie de jouer avec le codage en permettant à certains vecteurs d'attaque dans votre script). Vous aussi vous ne devriez pas compter sur la non-ascii des caractères dans vos paramètres GET ou dans l'URL (qui est aussi une raison pourquoi SEO-friendly liens de supprimer ces caractères ou se substituer à eux).Si vous vous êtes assuré que l'UTF-8 est le seul autorisé de jeu de caractères que vous pouvez utiliser
mb_strlen($string, 'UTF-8')
pour vérifier la longueur d'une variable par exemple.EDIT: (ajouté quelques liens)
Certaines choses que vous pouvez lire:
OriginalL'auteur
utilisation mb_internal_encoding de savoir quel encodage est actuellement défini. Si vous demande d'utiliser un journal de codage différent, vous avez mieux à l'utilisation mb_strlen.
Acclamations
OriginalL'auteur
Habituellement, vous avez le contrôle de l'encodage des caractères, puisque vous créez l' $_REQUEST de l'HTML vous envoyer au client.
c'est à dire: Il est généré par une page que vous avez envoyé à partir de PHP.
Donc vous ne devriez pas avoir à détecter l'encodage.
À l'aide de la mb_functions nécessite l'activation de la séquence multi-octets extension - si vous êtes à la distribution de code, vous devez être conscient de ne pas tout le monde va l'avoir.
OU en HTML:
http://www.w3.org/International/O-charset
Edit: PHP6 est utf-8, pas PHP5.
"Comme de PHP5, les fonctions de chaîne sont compatible UTF-8." C'est définitivement pas la bonne. PHP interne de la chaîne de toutes les fonctions de fonctionner sur le niveau des octets qui signifie qu'ils ne peuvent pas traiter avec des caractères multi-octets (valable pour PHP < 6). Toutes les fonctions internes où la longueur d'un personnage (en octets) est important pour son fonctionnement sont sujettes à l'erreur lorsque l'on travaille avec ces jeux de caractères. Mentionnés multi-octets extension (mb_*) a une surcharge de la capacité, mais je déconseille fortement de l'utiliser.
J'étais loin de là, PHP5 n'a pas de support multi-octets.
OriginalL'auteur