- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我已经知道 PCRE(特别是 PHP 的实现)中的 \w
有时可以匹配一些非 ASCII 字符,具体取决于系统的区域设置,但是 [a-z] 呢?
?
我不这么认为,但我在 Drupal 的核心文件之一(includes/theme.inc,已简化)中注意到这些行:
// To avoid illegal characters in the class,
// we're removing everything disallowed. We are not using 'a-z' as that might leave
// in certain international characters (e.g. German umlauts).
$body_classes[] = preg_replace('![^abcdefghijklmnopqrstuvwxyz0-9-_]+!s', '', $class);
这是真的吗,还是有人将 [a-z]
与 \w
混淆了?
最佳答案
长话短说:也许吧,取决于应用程序部署到的系统,取决于 PHP 是如何编译的,欢迎来到本地化和国际化的 CF。
底层 PCRE 引擎在确定“a-z”的含义时会考虑语言环境。在基于西类牙语的语言环境中,ñ 会被 a-z 捕获)。 a-z 的语义是“a 和 z 之间的所有字母,在西类牙语中 ñ 是一个单独的字母。”
但是,PHP 盲目地将字符串作为字节集合而不是 UTF 代码点集合来处理的方式意味着您会遇到 a-z 可能匹配重音字符的情况。考虑到 Drupal 部署到的不同系统的多样性,他们选择明确允许的字符而不是仅仅相信 a-z 做正确的事情是有道理的。
我还推测这个正则表达式的存在是由于提交了一份关于未过滤德语变音符号的错误报告的结果。
2014 年更新:根据 JimmiTh's answer below ,看起来(尽管有一些“令人困惑的非 pcre-core-developers”文档)[a-z]
只会匹配字符 abcdefghijklmnopqrstuvwxyz
众所周知的 99%的时间。也就是说 — 框架开发人员往往会对他们代码中的模糊性感到紧张,尤其是当代码依赖于 PHP 无法像您希望的那样优雅地处理的系统(特定于区域设置的字符串),并且开发人员无法控制服务器时。虽然匿名 Drupal 开发人员的评论是不正确的——这不是“让 [a-z]
与 \w
混淆”的问题,而是 Drupal 开发人员不清楚/不确定PCRE 如何处理 [a-z]
,并选择更具体的 abcdefghijklmnopqrstuvwxyz
形式以确保他们想要的特定行为。
关于php - [a-z] 会匹配 PREG/PCRE 中的重音字符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1930487/
我正在寻找一种方法来支持不区分大小写 + 重音不区分搜索的良好性能。到目前为止,我们在使用 MSSql 服务器时没有遇到任何问题,在 Oracle 上我们必须使用 OracleText,而现在我们在
这个问题已经有答案了: Trouble with UTF-8 characters; what I see is not what I stored (5 个回答) 已关闭 5 年前。 我刚刚将一个我
我正在寻找一种在 Linux 中使用反引号 (`)/波形符 (~) 键和其他一些键创建键盘快捷键的方法。在理想情况下: 按下波形符没有任何作用 按下波形符的同时按另一个键会触发(可自定义的)快捷方式
我有一个由术语组成的数组,其中一些包含重音字符。我像这样做一个 preg grep $data= array('Napoléon','Café'); $result = preg_grep('~' .
我使用 TextBox 在 DataGridView 中进行过滤 image .这是完美的工作。表格的单元格包含 1250 个拉丁字符。我想搜索忽略单元格中单词的重音。例子。如果是文本框 "knjaz
我在 Vim 中遇到一个奇怪的映射问题。我使用的是 Azerty 键盘。 在我的 .vimrc 中,我有以下命令可以在段落之间快速移动。 nnoremap _ { vnoremap _ { nnore
我尝试读取一个utf8编码的vcf文件,结果是: { "name": "=4A=61=76=69=65=72=20=4C=75=6A=C3=A1=6E", "tel":
我的数据库中有两个表,info 和 comment,它们的结构如下: info (id(int(10)), name(varchar(80)), ...19 other columns.., phon
我使用 QtWebkit 制作了一个应用程序。在同一个 html 页面中,在 Windows 上使用重音符号(西类牙语)时可以正常工作,但在 Linux (Ubuntu) 上则不起作用。 我不明白为什
我有(例如)两个字符串: $a = "joao"; $b = "joão"; if ( strtoupper($a) == strtoupper($b)) { echo $b; } 我希望它是
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: invalid multibyte char (US-ASCII) with Rails and Ruby
我重写 URL 以包含用户生成的旅游博客的标题。 我这样做是为了 URL 的可读性和 SEO 目的。 http://www.example.com/gallery/280-Gorges_du_Tod
我最近安装了新的 Windows 10 build 14393,我想使用新的 linux 子系统。所以我决定学习 ncurses,但我找不到如何从 getch 中获取带有重音符的字符的 UTF-8 代
我是一名优秀的程序员,十分优秀!