Comment détecter le mal formé chaîne utf-8 en PHP?
fonction iconv parfois me donne une erreur:
Notice:
iconv() [function.iconv]:
Detected an incomplete multibyte character in input string in [...]
Est-il un moyen de détecter qu'il y a des caractères illégaux dans les chaînes utf-8 avant de mettre des données à inconv ?
- En attendant j'ai trouvé ceci: stackoverflow.com/questions/4407854/...
InformationsquelleAutor rsk82 | 2011-07-17
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, notez qu'il n'est pas possible de détecter si le texte appartient à un indésirable de l'encodage. Vous pouvez uniquement vérifier si une chaîne est valide dans un codage donnée.
Vous pouvez utiliser de l'UTF-8 contrôle de validité qui est disponible dans
preg_match
[Manuel PHP] depuis PHP 4.3.5. Il sera de retour0
(pas d'information supplémentaire) si une chaîne non valide est donné:Une autre possibilité est
mb_check_encoding
[Manuel PHP]:Une autre fonction que vous pouvez utiliser est
mb_detect_encoding
[Manuel PHP]:Il est important de définir le
strict
paramètretrue
.En outre,
iconv
[Manuel PHP] vous permet de modifier/supprimer les invalides séquences à la volée. (Cependant, siiconv
rencontre une telle séquence, il génère une notification; ce comportement ne peut pas être changé).Vous pouvez utiliser
@
et vérifiez la longueur de la chaîne de retour:Vérifier les exemples sur la
iconv
page de manuel ainsi.Vous n'avez pas partagé le code source où l'avis est issu de l'. Vous devez l'ajouter si vous voulez une suggestion concrète.
preg_match('!.!u', $str)
fait l'affaire - il silencieusement vérifier si str est de l'utf-8 avant de tenter de trouver quoi que ce soit. - ce point dans regexp n'est même pas nécessairepreg_match
méthode fonctionne correctement sur les cordes à vide ainsi.preg_match()
semble être la manière la plus rapide dans l'ensemble (en PHP, 7) à la fois pour valide/invalide et court/long des chaînes de caractères.Vous pouvez essayer d'utiliser
mb_detect_encoding
de détecter si vous avez un jeu de caractères différent (que UTF-8) puismb_convert_encoding
pour convertir en UTF-8 si nécessaire. Il est plus probable que les gens sont en vous donnant valide le contenu dans un autre jeu de caractères que de l'UTF-8 non valide.La spécification sur lequel des caractères non valides dans l'UTF-8 est assez clair. Tu veux peut-être la bande des personnes avant d'essayer de l'analyser. Ils ne devraient pas être là, donc si vous pouviez l'éviter, même avant de générer le XML qui serait encore mieux.
Voir ici pour une référence:
http://www.w3.org/TR/xml/#charsets
Qui n'est pas une liste complète, de nombreux analyseur également interdire certains bas-numéroté les caractères de contrôle, mais je ne peux pas trouver une liste complète maintenant.
Cependant, iconv pourrait avoir la prise en charge intégrée pour cela:
http://www.zeitoun.net/articles/clear-invalid-utf8/start
mettre un @ devant iconv() pour supprimer l'AVIS et l' //IGNORER après UTF-8 dans la source codage de l'id d'ignorer les caractères non valides:
preg_match()
solution dans l'autre question est très intéressante, j'irais avec ça.