3

为什么ereg在 PHP 中被弃用?

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

这还有什么替代方案?

4

4 回答 4

3

Ereg 已被弃用,因为它已被 PCRE 扩展取代。它被替换和弃用的原因在下面的链接中得到了回答,但为了节省您一些时间,这里复制并粘贴了答案:

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

PHP ereg 与 preg

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

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

于 2010-06-20T11:30:11.867 回答
1

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

注意:从 PHP 5.3.0 开始,不推荐使用正则表达式扩展,取而代之的是 PCRE 扩展。调用此函数将发出 E_DEPRECATED 通知。有关转换为 PCRE 的帮助,请参阅差异列表。

于 2010-06-20T11:09:28.527 回答
0

它在文档页面上说明了原因:

注意:从 PHP 5.3.0 开始,不推荐使用 regex 扩展,取而代之的是PCRE 扩展。调用此函数将发出 E_DEPRECATED 通知。有关转换为 PCRE 的帮助,请参阅差异列表。

于 2010-06-20T11:09:32.013 回答
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,因为ereg在 PHP 6.0 中根本不再可用。

于 2017-11-16T13:27:05.140 回答