在PHP中检测CJK字符

5

我有一个输入框,允许使用UTF8字符--请问我能以程序方式检测这些字符是中文、日文或韩文吗(或者它们是否属于某个Unicode范围)?如果MySQL全文搜索不能处理CJK字符,我会根据情况更改搜索方法。

谢谢!

3个回答

12
// is chinese, japanese or korean language
function isCjk($string) {
    return isChinese($string) || isJapanese($string) || isKorean($string);
}

function isChinese($string) {
    return preg_match("/\p{Han}+/u", $string);
}

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

function isKorean($string) {
    return preg_match('/[\x{3130}-\x{318F}\x{AC00}-\x{D7AF}]/u', $string);
}

哇,谢谢!这应该是被采纳的答案 - 而且它是如此简单明了! - Marco Roy
1
简单就是最高的复杂。 :) - Mantas D

4

CJK字符受限于特定的Unicode块。您需要检查字符是否在这些块内,并考虑代理项(32位字符)。


1
你想检测一个字符是否为(中文或日文或韩文)字符吗?还是你想区分中文字符和日文字符?前者很容易;后者在许多情况下是不可能的,因为汉字统一。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接