PHP正则表达式 - 在2台服务器上进行不同的解析

时间:2009-12-15 09:28:28

标签: php regex

我有一个我以前没见过的问题。同一个正则表达式在两个不同的服务器上产生两个不同的结果。

这是代码:

preg_replace('#[^\pL0-9_@-]#iu', '', '!%&abc123_æøå');

服务器A上的结果(php 5.2.6,服务器Api:Apache 2.0处理程序):

abc123_æøå

服务器B上的结果(php 5.2.5,服务器Api:CGI / FastCGI):

123_

任何有关为何发生这种差异的想法?

3 个答案:

答案 0 :(得分:2)

这必须是因为

  • 区域设置
  • PHP多字节字符串支持开/关
  • PHP mb_string.func_overload(为多字节支持重载某些函数)

答案 1 :(得分:1)

您可以尝试使用mb_eregi_replace功能。

mb_eregi_replace('[^\pL0-9_@-]', '', '!%&abc123_æøå');

应该在支持多字节字符串的所有服务器上一致地工作,并且应该消除由于不同的文件编码而可能获得的问题。 (理论上,至少。)

答案 2 :(得分:0)

好吧,它终于解决了。服务器从php 5.2.5升级到5.2.11(尽管仍以cgi运行),旧版本的问题也随之消失。

感谢大家的反馈和建议!