Si j'ai une chaîne PHP, comment puis-je déterminer si elle contient au moins un caractère non-ASCII ou non, de manière efficace? Et par caractère non-ASCII, j'entends tout caractère ne faisant pas partie de ce tableau, http://www.asciitable.com/ , positions 32 à 126 inclus.
Donc, non seulement il doit faire partie de la table ASCII, mais il doit aussi être imprimable. Je souhaite détecter une chaîne contenant au moins un caractère ne répondant pas à ces spécifications (un fichier ASCII non imprimable ou un caractère différent, tel qu'un caractère Unicode ne faisant pas partie de cette table.
J'ai trouvé plus utile de détecter si un personnage tombe dans la liste
if(preg_match('/[^\x20-\x7f]/', $string))
Vous pouvez utiliser mb_detect_encoding
et vérifier le code ASCII:
mb_detect_encoding($str, 'ASCII', true)
Cela retournera false si $str
contient au moins un caractère non-ASCI (valeur d'octet> 0x7F).
La fonction ctype_print renvoie true si tous les caractères sont compris dans la plage ASCII 32-126 ( PHP test de l'unité ).
Essayez: ( Source )
function is_ascii( $string = '' ) {
return ( bool ) ! preg_match( '/[\\x80-\\xff]+/' , $string );
}
Bien que toutes les réponses ci-dessus soient correctes, mais en fonction de l'entrée, ces solutions peuvent donner de mauvaises réponses. Voir la dernière section de cet ASCII post de validation .
Vous pouvez utiliser:
mais ce ne sera peut-être pas aussi précis que vous le souhaitez.
Essayez ( mb_detect_encoding )
Je vous suggère de regarder utf8_encode ou utf8_decode dans le manuel de PHP:
http://www.php.net/manual/en/function.utf8-encode.php
Regardez les exemples ci-dessous, car il peut y avoir quelque chose qui vous mène dans la bonne direction si vous ne trouvez pas ce que vous recherchez.
Si vous ne voulez pas utiliser Regex
en javascript, vous pouvez le faire
detectUf8 : function(s) {
var utf8=s.split('').filter(function(C) {
return C.charCodeAt(0)>127;
})
return (utf8.join('').length>0);
},