为什么ereg
在 PHP 中被弃用?
我有很多使用它的功能,现在它们总是发出警告。
这还有什么替代方案?
Ereg 已被弃用,因为它已被 PCRE 扩展取代。它被替换和弃用的原因在下面的链接中得到了回答,但为了节省您一些时间,这里复制并粘贴了答案:
注意:使用 Perl 兼容的正则表达式语法的 preg_match()通常是 ereg() 更快的替代方法。
两者之间的一个区别是 ereg 寻找最长的匹配结果,而 preg 寻找第一个结果。以下是两者之间的差异列表,可帮助您确定如何最好地更新代码: http ://www.php.net/manual/en/reference.pcre.pattern.posix.php
需要注意的是,PHP 6.0 已经完全删除了 ereg,因此如果您最终要将代码移动到可能使用 PHP 6.0 的较新服务器上,则 ereg 函数将不再可用。
http://pl.php.net/manual/en/function.ereg.php
注意:从 PHP 5.3.0 开始,不推荐使用正则表达式扩展,取而代之的是 PCRE 扩展。调用此函数将发出 E_DEPRECATED 通知。有关转换为 PCRE 的帮助,请参阅差异列表。
一个可能的原因是性能问题,正如其他人已经回答的那样。
我想添加另一个(但)可能的原因:
假设你写了一些这样的代码(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 中根本不再可用。