【发布时间】:2011-02-20 20:46:52
【问题描述】:
我想在这个函数中对英文单词和日文单词有不同的处理
function process_word($word) {
if($word is english) {
/////////
}else if($word is japanese) {
////////
}
}
谢谢
【问题讨论】:
-
也许它不必是语言......只是为了区分双字节字符
我想在这个函数中对英文单词和日文单词有不同的处理
function process_word($word) {
if($word is english) {
/////////
}else if($word is japanese) {
////////
}
}
谢谢
【问题讨论】:
英文文本通常只包含 ASCII 字符(或者更好的说法是 ASCII 范围内的字符)。
【讨论】:
您可以尝试具有检测功能的 Google 翻译 API: http://code.google.com/apis/language/translate/v2/using_rest.html#detect-language
【讨论】:
您可以尝试转换字符集并检查是否成功。
看看iconv:http://www.php.net/manual/en/function.iconv.php
如果您可以将字符串转换为 ISO-8859-1,则可能是英文,如果您可以转换为 iso-2022-jp,则可能是日文(我可能对确切的字符集有误,您应该在谷歌上搜索) .
【讨论】:
试试mb_detect_encoding函数,如果编码是EUC-JP或者UTF-8 / UTF-16可以是日文,否则是英文。 如果你能确保每种语言的编码方式更好,因为 UTF 编码可以用于多种语言
【讨论】:
不需要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);
}
【讨论】:
Hai、Wa、Ka、Arigatou 等等,对吧?
这个函数检查一个单词是否至少包含一个日文字母(我在Wikipedia找到日文字母的unicode范围)。
function isJapanese($word) {
return preg_match('/[\x{4E00}-\x{9FBF}\x{3040}-\x{309F}\x{30A0}-\x{30FF}]/u', $word);
}
【讨论】: