2010-12-01 34 views
1

Je suis en train de prendre une chaîne UTF-8 qui ressemble à:PHP -Multibyte expression régulière pour supprimer tous les caractères, mais ... s'il vous plaît aider

& q |艝 隭) R 墢 LQ28} 徫 廵 g'Y 鑽 妽 踒 F

et dépouiller tout sauf les caractères chinois qu'ils sont 4E00-9FA5 hex et je voudrais ne garder que les caractères de la chaîne. Je l'ai essayé de prendre cette ligne qui ne laisse que valides caractères US:

preg_replace('/[^\x20-\x7E]/', '', $str); 

à cette:

preg_replace('/[^\x4E00-\x9FA5]/u', '', $str); 

mais il sort rien .... que je manque quelque chose? Je ne suis pas très bon avec les expressions régulières

+0

Également lorsque j'essaie d'utiliser mb_eregi_replace(); avec ou sans le modificateur/u (à mon avis, mb_eregi_replace devrait déjà avoir un support multi-octets, je n'ai pas d'erreur mais ma chaîne reste inchangée.) –

+0

Ces caractères n'ont pas de sens en chinois, il est plus probable que vous n'utilisiez pas le bon encodage. – kennytm

+1

Vous dites que vous avez une chaîne UTF-8, mais alors que vous êtes intéressé par la gamme 4e00-9fa5, cette plage fait référence aux valeurs Unicode (UCS-2) mais pas aux flux UTF-8, qui sont Vous pouvez le dire car, par exemple, la séquence 4e 00 en UTF-8 est composée de deux caractères et non d'un seul – borrible

Répondre

2

Vous étiez très proche!

preg_replace('/[^\x{4E00}-\x{9FA5}]/u', '', $str); 
+0

J'obtiens une erreur quand j'exécute ceci: function.preg-replace: Echec de la compilation: range out de l'ordre dans la classe de caractères à l'offset 12 ... j'ai mis php.ini mbstring.internal_encoding = UTF-8 est-il quelque chose d'autre que j'ai raté? –

+0

Toutes les suggestions? J'apprécie toute aide –

+0

@Mike: Travaux pour moi. /ideone.com/hcJQu – kennytm