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

String a = new String("foo");
String b = new String("foo");
System.out.println(a == b); // prints false
System.out.println(a.equals(b)); // prints true

Убедитесь, что вы понимаете, почему. Это потому, что сравнение == сравнивает только ссылки; equals() метод сопоставляет содержимое по символу.

Когда вы вызываете new для a и b, каждый получает новую ссылку, указывающую на "foo" в таблице строк. Ссылки разные, но контент один и тот же.

13
задан Makoto 29 April 2012 в 19:38
поделиться

6 ответов

Быстрое решение, для которого не требуется расширение 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);
}
23
ответ дан 1 December 2019 в 17:42
поделиться

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

1
ответ дан 1 December 2019 в 17:42
поделиться

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

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

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

0
ответ дан 1 December 2019 в 17:42
поделиться

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

3
ответ дан 1 December 2019 в 17:42
поделиться

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

0
ответ дан 1 December 2019 в 17:42
поделиться

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

function isJapanese($word) {
    return preg_match('/[\x{4E00}-\x{9FBF}\x{3040}-\x{309F}\x{30A0}-\x{30FF}]/u', $word);
}
22
ответ дан 1 December 2019 в 17:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: