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

3

我正在尝试在我的网站上运行正则表达式,但是我得到了这个响应:

编译失败:在偏移量1处未编译\P、\p和\X的支持

经过一番谷歌搜索,我发现我的服务器上的PCRE没有启用UTF8,因此会导致问题。当我使用pcretest -C ssh时,我得到以下结果:

PCRE版本6.6 06-Feb-2006

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

当我运行yum update pcre时,它告诉我没有任何需要更新的内容。

有人告诉我可以开启UTF-8支持...请帮忙?

我是一个新手。

3个回答

3
这里有一篇关于重建pcre RPM的好教程,链接在这里。如果你只是想让它工作,可以向下滚动到"Updated RPM file for...",你会找到一些预构建的RPM文件(记得在完成后重新启动Apache,而不仅仅是优雅地重新加载)。
简单来说,重新编译pcre使用 --enable-utf8--enable-unicode-properties

3

现在,Yum应该能够在其仓库中找到v6.6.6.el5_6.1的PCRE,因此在Centos 5上执行yum update pcre解决了我的问题。


yum update pcre 对我有用。不过别忘了在之后执行 service httpd restart - Steve Parish

1

PHP不使用“pcre”应用程序/包。 PCRE支持内置于PHP库中。 您收到的错误提示您的PHP库未使用PCRE UTF-8支持进行编译。

您需要重新编译PHP,并使用正确的PCRE静态库以及正确的UTF-8选项。


好的,这很酷……不要疯了,但是因为我真的很新手……是否有一个好的新手教程可以向我展示如何重新编译?谢谢你的耐心……我知道这可能是个愚蠢的问题。 - johnnietheblack
老实说,我从来没有做过这件事情,所以不太清楚。通常情况下,这很容易(通常:获取源文件,解压缩,执行configure,然后make和make install)。棘手的部分在于需要满足所有先决条件。您可能还需要重新制作libpcre。也有可能您只需重新制作libpcre而不用触及php。我不确定php是静态链接还是动态链接。 - SoapBox
只是为了确认一下...你是指 pcre 而不是 prce,对吗? - SOFe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接