2010-05-18 86 views
13

我想爲英語單詞和日語單詞的不同過程,這個功能如何檢查單詞是日語或英語的使用PHP

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

謝謝

+1

也許它不一定是語言...只是爲了區分雙字節字符 – bbnn 2010-05-18 12:15:54

回答

22

一個快速的解決方案,不需要mb_string擴展:

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

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

或將修改solution provided by @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); 
} 
+0

這留下了使用變音符的英文單詞。這些不常使用,但它是一個權衡,應該知道什麼時候做出選擇:) – 2010-05-18 14:57:19

+0

@ Thomas.Winsnes:你的意思是像'Hai','Wa','Ka','Arigatou'等東西,對? – 2010-05-18 14:59:55

+0

不,我的意思是英文單詞:naïve,café,résumé,soufflé等。 – 2010-05-18 15:19:52

0

英文文本通常只由ASCII的字符(或更好地說,ASCII範圍內的字符)。

+0

什麼是範圍?有沒有任何鏈接?謝謝 – bbnn 2010-05-20 16:10:46

+1

儘管將大多數單詞識別爲英語或日語是相當容易的,但有一些字符屬於兩個字符集。 例如,僅包含數字的字符串應對英語和日語都返回true。 – 2010-06-07 16:57:43

0

你可以嘗試轉換的字符集,並檢查它是否成功。

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

如果你可以將字符串轉換爲ISO-8859-1這可能是英文,如果你能轉換爲ISO-2022-JP是propably日本(我可能是對於確切的字符集錯誤,你應該爲他們谷歌)。

1

試用mb_detect_encoding函數,如果編碼是EUC-JP或UTF-8/UTF-16,可以是日語,否則是英文。 更好的是,如果你能保證其編碼每一種語言,如UTF編碼可用於許多語言

22

此功能檢查一個詞是否包含至少一個日文字母(我在Wikipedia發現Unicode範圍由日本字母)。

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

+1,走吧,好的! – 2010-05-18 14:45:59

+0

好主意! --- – 2010-06-07 16:58:08

+1

根據上面的註釋,4E00-9FBF中的字符不限於日文使用,所以這不是一個可靠的測試。 http://unicode.org/faq/han_cjk.html#4 – 2012-07-30 02:40:21