PHP PCRE(正则表达式)不支持 UTF-8?

2021-12-23 00:00:00 regex ssh pcre php

我正在尝试在我的网站上运行正则表达式,但收到以下响应:

I am attempting to run a regex on my site, and I am getting this response:

编译失败:支持P,p 和 X 尚未编译偏移量 1

Compilation failed: support for P, p, and X has not been compiled at offset 1

在谷歌上搜索了一下之后,我发现我服务器上的 PCRE 显然没有启用 UTF8,因此导致了问题.当我使用 pcretest -C ssh 时,我得到

After googling for a bit, I've found that apparently my PCRE on my server is not UTF8 enabled, and is therefore causing problems. When I ssh with pcretest -C I get

PCRE 6.6 版 2006 年 2 月 6 日

PCRE version 6.6 06-Feb-2006

编译支持UTF-8 否Unicode 属性支持换行字符为 LF 内部链接大小 =2 POSIX malloc 阈值 = 10
默认匹配限制 = 10000000
默认递归深度限制 =10000000 匹配递归使用堆栈

Compiled with UTF-8 support No Unicode properties support Newline character is LF Internal link size = 2 POSIX malloc threshold = 10
Default match limit = 10000000
Default recursion depth limit = 10000000 Match recursion uses stack

当我执行 yum update pcre 时,它​​告诉我没有任何东西可以更新.

When I do yum update pcre it tells me that there isn't anything to update.

人们告诉我我可以打开 UTF-8 支持...帮助?

People are telling me that I can turn on UTF-8 support...help?

我是菜鸟.

推荐答案

有一个关于为 pcre 重建 RPM 的很好的教程 这里.

There's a good tutorial on rebuilding the RPM for pcre here.

如果您向下滚动到更新的 RPM 文件...",您会发现一些预先构建的 RPM,如果您只是想让它工作(记住在完成后重新启动 Apache,而不仅仅是正常的重新加载).

If you scroll down to "Updated RPM file for..." you'll find some pre-built RPM's if you just want it to work (remember to restart Apache after you're done, not just a graceful reload).

tl;dr 版本是:用 --enable-utf8--enable-unicode-properties

The tl;dr version is: recompile pcre with --enable-utf8 and --enable-unicode-properties

相关文章