为什么在PHP中不推荐使用ereg
?
我有很多使用它的功能,现在他们总是发出警告。
这也有什么选择?
答案 0 :(得分:2)
http://pl.php.net/manual/en/function.ereg.php
注意:从PHP 5.3.0开始,不推荐使用正则表达式扩展,以支持PCRE扩展。调用此函数将发出E_DEPRECATED通知。有关转换为PCRE的帮助,请参阅差异列表。
答案 1 :(得分:2)
Ereg已被弃用,因为它已被PCRE扩展名取代。它被替换和弃用的原因在下面的链接中得到了解答,但为了节省您一些时间,这里是复制和粘贴的答案:
注意:preg_match()使用与Perl兼容的正则表达式语法通常是ereg()的更快替代方法。
两者之间的一个区别是,当preg查找第一个结果时,ereg会查找最长的匹配结果。以下列出了两者之间的差异,以帮助您确定如何最好地更新代码: http://www.php.net/manual/en/reference.pcre.pattern.posix.php
值得注意的是,PHP 6.0已经完全删除了ereg,因此如果您最终要将代码移动到可能使用PHP 6.0的较新服务器,则ereg函数将不再可用。
答案 2 :(得分:1)
它说明documentation page上的原因:
注意:自PHP 5.3.0起,不推荐使用正则表达式扩展,而使用PCRE extension。调用此函数将发出E_DEPRECATED通知。有关转换为PCRE的帮助,请参阅list of differences。
答案 3 :(得分:0)
一个可能的原因是性能问题,正如其他人已经回答的那样。
我想添加另一个(还)可能的原因:
假设您编写了一些这样的代码(PHP 5.3):
<?php
$arg=$_GET['key'];
if (ereg('^[A-Za-z0-9]+$', $arg) === FALSE){
die('Invalid key');
}
# Do some other things with $arg
?>
可以通过提供此URL来绕过它:
foo.php?key=A%00text
^~~~
text
部分他想要的任何,这在代码中留下了巨大的安全漏洞。 preg_match()
但是,没有这个问题。因此,您最好将所有代码迁移到preg
,因为PHP 6.0中根本不再提供ereg
。