UTF-8&;PHP中的IsAlpha()

UTF-8&;PHP中的IsAlpha(),php,user-interface,Php,User Interface,我正在开发一个支持多种语言的应用程序,它有一个功能,可以尝试使用浏览器请求的语言,还可以手动覆盖此功能。此部分工作正常,并选择正确的模板、标签等 用户有时必须自己输入文本,这就是我遇到问题的地方,因为应用程序甚至必须接受“复杂”的语言,如中文和俄文。到目前为止,我已经处理了其他帖子中提到的事项,即: 调用mb\u内部编码('UTF-8') 使用metahttp equiv=Content-Type Content=text/html呈现网页时设置正确的编码;字符集=UTF-8(由于堆栈溢出限制

我正在开发一个支持多种语言的应用程序,它有一个功能,可以尝试使用浏览器请求的语言,还可以手动覆盖此功能。此部分工作正常,并选择正确的模板、标签等

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

  • 调用
    mb\u内部编码('UTF-8')
  • 使用
    metahttp equiv=Content-Type Content=text/html呈现网页时设置正确的编码;字符集=UTF-8
    (由于堆栈溢出限制而调整格式)
  • 甚至内容也能正确到达,因为
    mb\u detect\u encoding()==UTF-8
  • 试图设置
    setLocale(LC_CTYPE,“UTF-8”)
    ,但似乎不起作用,因为它需要选择一种语言,我无法指定,因为我必须支持多种语言。如果我出于测试目的手动强制它,它仍然失败,即使用
    setLocale(LC\u CTYPE,“zh\u CN.utf8”)
    -
    CTYPE\u alpha()
    对于中文文本仍然会失败
似乎即使是显式语言选择也不会使
ctype\u alpha()
有用

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

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


您将如何解决此问题?

我不会使用字符数组。这将变得不可能管理


我的建议是从IP地址计算出一种“默认”语言,并将其用作请求的语言环境。在某些情况下,还可以从浏览器代理字符串中获取。您可以为用户提供一种覆盖方法,这样,如果您的默认设置不正确,他们就不会被一个陌生的站点所困扰。(例如,在表格中提供“语言设置为英语。如果这不正确,请更改:”。这不是最好提供的内容,但您不会得到任何工作验证,因为您需要语言/区域设置才能进行合理的alpha验证(a不是中文字母)。

您可以从

$_SERVER['HTTP_ACCEPT_LANGUAGE']
它包含如下内容

de-de,de;q=0.8,en-us;q=0.5,en;q=0.3

因此,您需要解析此字符串。然后,您可以在setLocale函数中使用首选语言。

如果您只想检查有效的unicode字母,而不考虑我建议使用的正则表达式所使用的语言(如果您的pcre正则表达式扩展是使用unicode支持构建的):


\p{L}
使用
L
(etter)属性检查unicode字符,该属性包括
Ll
(小写字母)、
Lm
(修饰字母)、
Lo
(其他字母)、
Lt
(标题字母)和
Lu
(大写字母)-from:)这是一个编码问题,而不是语言检测问题。因为UTF-8可以对任何Unicode字符进行编码

最好的方法是在整个项目中使用UTF-8:在数据库中,在输出中,以及在输入的预期编码中

  • 输出确保使用UTF-8编码数据,并在中的HTTP头中声明,而不仅仅是在文档本身中声明
  • 输入如果使用表单,请在中声明预期的编码

谢谢,S.-这对除中文以外的所有语言都非常有效。我开始理解为什么很少有应用程序支持它;)
// adjust pattern to your needs
// $input needs to be UTF-8 encoded
if (preg_match('/^\p{L}+$/u', $input)) {
    // OK
} else {
    // not OK
}