13

我想在这个功能中对英文单词和日文单词有不同的处理

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

谢谢你

4

6 回答 6

25

不需要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);
}
于 2010-05-18T12:59:42.763 回答
22

这个函数检查一个单词是否至少包含一个日文字母(我在Wikipedia中找到了日文字母的 unicode 范围)。

function isJapanese($word) {
    return preg_match('/[\x{4E00}-\x{9FBF}\x{3040}-\x{309F}\x{30A0}-\x{30FF}]/u', $word);
}
于 2010-05-18T13:39:53.050 回答
3

您可以尝试具有检测功能的 Google 翻译 API: http ://code.google.com/apis/language/translate/v2/using_rest.html#detect-language

于 2010-05-18T11:57:51.473 回答
1

尝试使用mb_detect_encoding函数,如果编码是 EUC-JP 或 UTF-8 / UTF-16 它可以是日语,否则是英语。更好的是,如果您可以确保每种语言使用哪种编码,因为 UTF 编码可用于多种语言

于 2010-05-18T12:33:20.610 回答
0

英文文本通常只包含 ASCII 字符(或者更好的说法是 ASCII 范围内的字符)。

于 2010-05-18T11:57:45.953 回答
0

您可以尝试转换字符集并检查它是否成功。

看看iconv:http ://www.php.net/manual/en/function.iconv.php

如果您可以将字符串转换为 ISO-8859-1,它可能是英文,如果您可以转换为 iso-2022-jp,它可能是日文(我可能对确切的字符集有误,您应该搜索它们)。

于 2010-05-18T12:03:11.913 回答