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"
в таблице строк. Ссылки разные, но контент один и тот же.
Быстрое решение, для которого не требуется расширение 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);
}
Попробуйте использовать функцию mb_detect_encoding , если кодировка - EUC-JP или UTF-8 / UTF-16, она может быть японской, иначе английской. Лучше, если вы сможете указать, какая кодировка для каждого языка, поскольку кодировки UTF могут использоваться для многих языков
Вы можете попробовать преобразовать кодировку и проверить, удалось ли это.
Взгляните на iconv: http://www.php.net/manual/en/function.iconv.php
Если вы можете преобразовать строку в ISO-8859-1, это может быть английский , если вы можете преобразовать в iso-2022-jp, это, вероятно, японский язык (я могу ошибаться в отношении точных кодировок, вы должны найти их в Google).
Вы можете попробовать воспользоваться Google Translation API, который имеет функцию обнаружения: http://code.google.com/apis/language/translate/v2/using_rest.html#detect-language
Английский текст обычно состоит только из символов ASCII (или лучше сказать, символов в диапазоне ASCII).
Эта функция проверяет, содержит ли слово хотя бы одну японскую букву (я нашел диапазон Unicode для японских букв в Википедии ).
function isJapanese($word) {
return preg_match('/[\x{4E00}-\x{9FBF}\x{3040}-\x{309F}\x{30A0}-\x{30FF}]/u', $word);
}