为什么PHP中的`ereg`已被弃用?

3

为什么PHP中的ereg被弃用?

我有很多使用它的函数,现在它们总是发出警告。

这个的替代方法是什么?

4个回答

3

Ereg已经被PCRE扩展替代,因此已经被弃用。下面的链接解释了它被替换和弃用的原因,但为了节省您的时间,这里是复制粘贴的答案:

注意:使用Perl兼容的正则表达式语法的preg_match()通常比ereg()更快。

PHP ereg vs. preg

两者之间的一个区别是,ereg查找最长匹配结果,而preg查找第一个结果。以下是两者之间的差异列表,以帮助您确定如何最好地更新代码: http://www.php.net/manual/en/reference.pcre.pattern.posix.php

需要注意的是,PHP 6.0已完全删除ereg,因此如果您最终要将代码移动到可能使用PHP 6.0的新服务器上,则ereg函数将不再可用。


1

http://pl.php.net/manual/en/function.ereg.php

注意:自 PHP 5.3.0 起,正则表达式扩展已被弃用,建议使用 PCRE 扩展。调用此函数将发出 E_DEPRECATED 通知。请参阅差异列表以获取有关转换为 PCRE 的帮助。

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 已不再提供。


0

这是因为在文档页面上说明了原因:

注意:自 PHP 5.3.0 起,正则表达式扩展被弃用,建议使用PCRE 扩展。调用此函数将发出 E_DEPRECATED 提示。有关转换为 PCRE 的帮助,请参见 差异列表


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