为什么PHP中的ereg
被弃用?
我有很多使用它的函数,现在它们总是发出警告。
这个的替代方法是什么?
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函数将不再可用。
<?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
已不再提供。