web-dev-qa-db-fra.com

Comment détecter des caractères non-ASCII dans une chaîne?

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.

29
rid

J'ai trouvé plus utile de détecter si un personnage tombe dans la liste

if(preg_match('/[^\x20-\x7f]/', $string))
57
Karolis

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).

32
Gumbo

La fonction ctype_print renvoie true si tous les caractères sont compris dans la plage ASCII 32-126 ( PHP test de l'unité ).

2
Steffen

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 .

2
Hamid Sarfraz

Vous pouvez utiliser:

mb_detect_encoding

mais ce ne sera peut-être pas aussi précis que vous le souhaitez.

2
fyr

Essayez ( mb_detect_encoding )

2
Hans Kerkhof

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. 

0
Ole Media

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);
},
0
loretoparisi