2010-08-05 22 views
14

Je souhaite interdire certaines entrées UTF-8 (côté serveur), par ex. langues orientales, où l'entrée d'exemple pourrait être "伊".Comment puis-je détecter des caractères non-occidentaux?

Cependant, je souhaite continuer à prendre en charge d'autres caractères latins ou "latins", tels que les caractères welsh ŵ et ŷ, donc checking against latin-1 is not possible.

Quelles sont mes options? (si la langue spécifique, PHP préféré)

Merci beaucoup.


Raisonnement: support du navigateur pour un grand nombre de caractères non-occidentaux manque souvent (par exemple sur un autre navigateur que je vois juste une boîte dans la question ci-dessus), donc pour des choses comme les noms d'affichage parfois, il est approprié de limiter même si ce n'est pas approprié pour les corps de message

+2

ne vous dérange pas si je vous demande pourquoi vous ne voulez pas que certaines langues sur un site internationalisé? – Borealid

+0

Juste question. C'est juste nécessaire pour un champ d'une table; le reste du site le supportera. – HoboBen

+2

Alors, quel est le sous-ensemble de caractères que vous autorisez? Est-ce que cela correspond à un jeu de caractères existant? Si c'est le cas, vous pouvez simplement 'iconv' la chaîne de l'encodage cible, en rejetant tous les caractères invalides. – deceze

Répondre

30

Just do

preg_match('/[^\\p{Common}\\p{Latin}]/u', $string) 

$string est une chaîne UTF-8. Cela retournera "1" s'il y a des caractères non latins et retournera "0" sinon.

Exemple:

var_dump(preg_match('/[^\\p{Common}\\p{Latin}]/u', 'sf..ŷaás??')); //int(0) 
var_dump(preg_match('/[^\\p{Common}\\p{Latin}]/u', 'sf..ŷݤaás??')); //int(1) 
+0

On dirait utile! +1 – alex

+0

Fonctionne bien, merci beaucoup! – HoboBen

+0

Y a-t-il une liste de sous-modèles nommés quelque part? – HoboBen