为什么PHP中不推荐使用`ereg`?

时间:2010-06-20 11:06:08

标签: php posix-ere

为什么在PHP中不推荐使用ereg

我有很多使用它的功能,现在他们总是发出警告。

这也有什么选择?

4 个答案:

答案 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()的更快替代方法。

PHP ereg vs. preg

两者之间的一个区别是,当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