2010-05-18 25 views

Répondre

22

Une solution rapide qui n'a pas besoin de l'extension mb_string:

if (strlen($str) != strlen(utf8_decode($str))) { 
    // $str uses multi-byte chars (isn't English) 
} 

else { 
    // $str is ASCII (probably English) 
} 

ou une modification du solution provided by @Alexander Konstantinov:

function isKanji($str) { 
    return preg_match('/[\x{4E00}-\x{9FBF}]/u', $str) > 0; 
} 

function isHiragana($str) { 
    return preg_match('/[\x{3040}-\x{309F}]/u', $str) > 0; 
} 

function isKatakana($str) { 
    return preg_match('/[\x{30A0}-\x{30FF}]/u', $str) > 0; 
} 

function isJapanese($str) { 
    return isKanji($str) || isHiragana($str) || isKatakana($str); 
} 
+0

Ceci exclut les mots anglais qui utilisent des signes diacritiques. Ceux-ci ne sont pas très souvent utilisés, mais c'est un compromis qui devrait être connu en faisant le choix :) –

+0

@ Thomas.Winsnes: Vous voulez dire des choses comme 'Hai',' Wa', 'Ka',' Arigatou' et ainsi de suite, droite? –

+0

Non, je veux dire des mots anglais comme: naïf, café, résumé, soufflé etc. –

0

texte anglais se compose généralement de l'ASCII caractères (ou mieux dire, les caractères dans la gamme ASCII).

+0

ce sont la plage? Avez-vous des liens? merci – bbnn

+1

Bien qu'il soit assez facile d'identifier la plupart des mots comme étant anglais ou japonais, certains caractères appartiennent aux deux jeux de caractères. Par exemple, une chaîne contenant uniquement des nombres doit renvoyer true pour l'anglais et le japonais. –

0

Vous pouvez essayer de convertir le charset et vérifier si elle réussit.

Jetez un oeil à iconv: http://www.php.net/manual/en/function.iconv.php

Si vous pouvez convertir une chaîne en ISO-8859-1, il est peut-être l'anglais, si vous pouvez convertir en iso-2022-jp il est propably japonais (je pourrais être mal pour les charsets exactes, vous devriez google pour eux).

1

Essayez avec la fonction mb_detect_encoding, si le codage est EUC-JP ou UTF-8/UTF-16, il peut être japonais, sinon anglais. Le mieux est si vous pouvez vous assurer que le codage de chaque langue, comme encodages UTF peuvent être utilisés pour de nombreuses langues

22

Cette fonction vérifie si un mot contient au moins une lettre japonaise (j'ai trouvé gamme unicode pour les lettres japonaises Wikipedia).

function isJapanese($word) { 
    return preg_match('/[\x{4E00}-\x{9FBF}\x{3040}-\x{309F}\x{30A0}-\x{30FF}]/u', $word); 
} 
+0

+1, Way to go, une belle! –

+0

Bonne idée! --- –

+1

Selon le commentaire ci-dessus, les caractères dans 4E00-9FBF ne sont pas limités à l'utilisation en japonais, ce n'est donc pas un test fiable. http://unicode.org/faq/han_cjk.html#4 –