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

StackOverflow https://stackoverflow.com/questions/2856942

  •  27-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

Другие советы

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

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

Вы можете попробовать API Google перевода 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).

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

Посмотрите на iconv: http://www.php.net/manual/en/function.iconv.php.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top