Как проверить, является ли слово японским или английским, используя PHP - PullRequest
13 голосов
/ 18 мая 2010

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

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

спасибо

Ответы [ 6 ]

23 голосов
/ 18 мая 2010

Быстрое решение, которому не нужно расширение mb_string:

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

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

Или модификация решения , предоставленного @ 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);
}
22 голосов
/ 18 мая 2010

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

function isJapanese($word) {
    return preg_match('/[\x{4E00}-\x{9FBF}\x{3040}-\x{309F}\x{30A0}-\x{30FF}]/u', $word);
}
3 голосов
/ 18 мая 2010

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

1 голос
/ 18 мая 2010

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

0 голосов
/ 18 мая 2010

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

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

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

0 голосов
/ 18 мая 2010

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

...