我遇到了一个以前从未见过的问题。同样的正则表达式在两个不同的服务器上产生了两个不同的结果。
以下是代码:
preg_replace('#[^\pL0-9_@-]#iu', '', '!%&abc123_æøå');
服务器A上的结果(php 5.2.6,服务器Api:Apache 2.0 Handler):
abc123_æøå
服务器B上的结果(php 5.2.5,服务器Api:CGI/FastCGI):
123_
有没有人对为什么会出现这种差异有任何想法?
我遇到了一个以前从未见过的问题。同样的正则表达式在两个不同的服务器上产生了两个不同的结果。
以下是代码:
preg_replace('#[^\pL0-9_@-]#iu', '', '!%&abc123_æøå');
服务器A上的结果(php 5.2.6,服务器Api:Apache 2.0 Handler):
abc123_æøå
服务器B上的结果(php 5.2.5,服务器Api:CGI/FastCGI):
123_
有没有人对为什么会出现这种差异有任何想法?
这可能是由于以下原因:
mb_eregi_replace('[^\pL0-9_@-]', '', '!%&abc123_æøå');
应该在支持多字节字符串的所有服务器上保持一致,并且应该消除由于不同文件编码而可能出现的问题。(至少从理论上讲。)
mb_regex_encoding
。看看它们是否不同。您也可以直接在编码中硬编码。mb_regex_encoding('UTF-8');
,或者您想使用的任何编码。 - Atlimb_eregi_replace
和preg_replace
的效果也是相同的。很奇怪的事情。 - Tommy好了,问题终于解决了。服务器已经从php 5.2.5升级到5.2.11(仍然作为cgi运行),旧版本的问题已经消失。
感谢大家的反馈和建议!