Quel est le moyen le plus rapide, en PHP, de déterminer si un texte UTF-8 donné est purement ASCII ou non?Déterminer si le texte UTF-8 est tout ASCII?
Répondre
Une fonction peut-être plus rapide serait d'utiliser une classe de caractère négatif (puisque l'expression régulière peut simplement arrêter quand il frappe le premier caractère, et il n'y a pas besoin de capturer en interne quoi que ce soit):
function isAscii($str) {
return 0 == preg_match('/[^\x00-\x7F]/', $str);
}
sans regex (basé sur mon commentaire) {
function isAscii($str) {
$len = strlen($str) {
for ($i = 0; $i < $len; $i++) {
if (ord($str[$i]) > 127) return false;
}
return true;
}
Mais je dois demander, pourquoi êtes-vous si préoccupé plus vite? Utilisez plus lisible et plus facile à comprendre la version, et ne vous inquiétez pas sur l'optimisation quand vous savez c'est un problème ...
Modifier:
le plus rapide sera probablement alors mb_check_encoding
:
function isAscii($str) {
return mb_check_encoding($str, 'ASCII');
}
Vérifiez si un octet est supérieur à 0x7f ou si un caractère est supérieur à U + 007F.
Assez simple '$ isNotAscii = false; pour ($ i = 0, $ len = strlen ($ chaîne); $ i <$ len; $ i ++) {if (ord ($ chaîne [$ i])> 127) {$ isNotAscii = true; Pause; }} '. Il itéra sur chaque caractère de la chaîne à la recherche d'un caractère> 127 ... – ircmaxell
Je crois que preg_match sera plus rapide dans ce cas ... n'a pas de benchmark mais pour les chaînes de correspondance, il est presque toujours –
function isAscii($str) {
return preg_match('/^([\x00-\x7F])*$/', $str);
}
// doesn't accept ASCII control characters
function isAsciiText($str) {
return preg_match('/^([\x09\x0A\x0D\x20-\x7E])*$/', $str);
}
cela échouera sur certains valide Caractères de contrôle ASCII – stillstanding
voir la fonction mise à jour. est-ce plus rapide/meilleur que l'itération? – philfreo
- 1. Conversion de UTF8 en ASCII
- 2. Ruby 1.9 champ renvoyant l'encodage ASCII même si UTF8 spécifié
- 3. Déterminer si le module Magento est activé
- 4. Déterminer si aujourd'hui est le lundi
- 5. Écrire du texte UTF8 dans le fichier
- 6. Déterminer si l'utilisateur est connecté
- 7. déterminer si uiview est affiché
- 8. Comment vérifier si le fichier est ASCII ou binaire en C++
- 9. comment convertir une chaîne utf8 en chaîne ASCII?
- 10. déterminer si une autre application est occupée
- 11. Comment déterminer si NSString est vide
- 12. Comment m'assurer que le texte codé dans un formulaire est utf8
- 13. objective-c déterminer si le paramètre est un objet
- 14. Déterminer si l'application est WinForms ou WebForms
- 15. Déterminer si la variable a N'IMPORTE QUEL texte
- 16. TinyMCE problème où tout le texte est centré si l'utilisateur centre la ligne supérieure
- 17. Détecter si le texte est en gras
- 18. Déterminer si un répertoire est inscriptible
- 19. Déterminer si l'erreur $ .ajax est un délai
- 20. Déterminer si Flash OCX est installé?
- 21. Comment déterminer si un pthread est actif?
- 22. Comment déterminer si XML est bien formé?
- 23. Texte UTF-8 vs ASCII
- 24. Déterminer si un type est statique
- 25. Déterminer si l'utilisateur est en ligne
- 26. Comment déterminer si une fonction est vide
- 27. Déterminer si une touche est actuellement pressée
- 28. déterminer si dropdownlist est sélectionné ou non
- 29. Déterminer si le mois est presque fini dans Groovy
- 30. Déterminer si le site est en cours d'exécution HTTPS
ceci sera exécuté sur beaucoup de texte fréquemment, et je pense que les deux sont très lisibles, tellement plus vite est certainement meilleur ici. – philfreo
@philfreo: Mise à jour une réponse ... Mais le meilleur moyen pour vous de dire ce qui est le plus rapide est de réellement comparer les options en utilisant vos conditions ... – ircmaxell
mais apparemment la fonction d'ord de PHP a des problèmes avec utf-8 – barlop