我正在开发一个支持多种语言的应用程序,该应用程序具有尝试使用浏览器请求的语言并允许手动覆盖此功能的功能。这部分工作正常并选择了正确的模板、标签等。
用户有时必须自己输入文本,这就是我遇到问题的地方,因为应用程序必须接受甚至“复杂”的语言,如中文和俄语。到目前为止,我已经处理了其他帖子中提到的事情,即:
- 调用
mb_internal_encoding( 'UTF-8' )
- 在使用
meta http-equiv=Content-Type content=text/html;charset=UTF-8
呈现网页时设置正确的编码(格式因 stackoverflow 限制而调整) - 即使内容正确到达,因为
mb_detect_encoding() == UTF-8
- 尝试设置
setLocale(LC_CTYPE, "UTF-8")
,这似乎不起作用,因为它需要选择一种语言,我无法指定,因为我必须支持几个。如果我出于测试目的手动强制它,它仍然会失败,即;setLocale(LC_CTYPE,"zh__CN.utf8")
-ctype_alpha()
对于中文文本仍然会失败
似乎即使是明确的语言选择也不会使 ctype_alpha()
有用。
因此问题是:我应该如何检查所有语言的字母字符?
我当时唯一的想法是手动检查“有效”字符数组 - 但这看起来很难看,尤其是对于中文。
你会如何解决这个问题?
最佳答案
如果您只想检查有效的 unicode 字母而不考虑使用的语言,我建议使用正则表达式(如果您的 pcre-regex 扩展是使用 unicode 支持构建的):
// adjust pattern to your needs
// $input needs to be UTF-8 encoded
if (preg_match('/^\p{L}+$/u', $input)) {
// OK
} else {
// not OK
}
\p{L}
使用 L
(etter) 属性检查 unicode 字符,其中包括属性 Ll
(小写字母) 、Lm
(修饰符字母)、Lo
(其他字母)、Lt
(标题大写字母)和 Lu
(大写字母)- 来自:Regular Expression Details ).
关于php - PHP 中的 UTF-8 和 IsAlpha(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/961573/