Как проверить, является ли это слово японским или английским, используя PHP

Я хочу, чтобы в этой функции был разный процесс для английского слова и японского слова

function process_word($word) { if($word is english) { ///////// }else if($word is japanese) { //////// } } 

Спасибо

Быстрое решение, для которого не требуется расширение mb_string :

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

Или модификация решения, предоставленного @ Александром Константиновым :

 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); } 

Эта функция проверяет, содержит ли слово хотя бы одно японское письмо (я нашел диапазон Юникода для японских букв в Википедии ).

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

Вы можете попробовать API перевода Google, который имеет функцию обнаружения: http://code.google.com/apis/language/translate/v2/using_rest.html#detect-language

Попробуйте использовать функцию mb_detect_encoding , если кодировка EUC-JP или UTF-8 / UTF-16 может быть японской, иначе английской. Лучше, если вы можете обеспечить кодирование каждого языка, поскольку кодировки UTF могут использоваться для многих языков

Английский текст обычно состоит только из символов ASCII (или, лучше сказать, символов в диапазоне ASCII).

Вы можете попробовать конвертировать кодировку и проверить, удастся ли она.

Взгляните на значок: http://www.php.net/manual/en/function.iconv.php

Если вы можете преобразовать строку в ISO-8859-1, это может быть английский, если вы можете конвертировать в iso-2022-jp, это возможно japanese (возможно, я ошибаюсь для точных кодировок, вы должны их использовать).