PHP中的UTF-8和IsAlpha()

MrG*_*MrG 2 php user-interface

我正在开发一个支持多种语言的应用程序,并且具有一个功能,它试图使用浏览器请求的语言,并允许手动覆盖此功能.这部分工作正常,并选择正确的模板,标签等.

用户有时必须自己输入文本,这就是我遇到问题的地方,因为应用程序必须接受甚至是"复杂"的语言,如中文和俄文.到目前为止,我已经处理了其他帖子中提到的事情,即:

  • 调用 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()用.

因此问题是:我应该如何检查所有语言的字母字符?

我目前唯一的想法是手动检查"有效"字符数组 - 但这对中国人来说似乎很难看.

你会如何解决这个问题?

Ste*_*rig 6

如果你想检查有效的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
}
Run Code Online (Sandbox Code Playgroud)

\p{L}使用L(etter)属性检查unicode字符,该属性包括属性Ll(小写字母),Lm(修饰符字母),Lo(其他字母),Lt(标题大小写字母)和Lu(大写字母) - 来自:正则表达式详细信息).