弃用 Eregi 的问题

issue with eregi being deprecated

提问人:Epiphanisation 提问时间:2/11/2011 最后编辑:BenMorelEpiphanisation 更新时间:5/18/2014 访问量:200

问:

我已经升级了 PHP,现在我收到了 eregi 弃用的错误。

我在网上进行了一些搜索,发现我可以改用 preg,但不确定如何正确更改此代码

eregi("^$row->baseUrl", $_SERVER["SCRIPT_NAME"])

我的尝试是:

preg_match("^$row->baseUrl/i", $_SERVER["SCRIPT_NAME"])

但我不确定这是否正确。

有人可以检查和建议吗?

php-5.3的

评论


答:

1赞 Gumbo 2/11/2011 #1

您根本不需要正则表达式:

strcasecmp(substr($_SERVER["SCRIPT_NAME"], 0, strlen($row->baseUrl)), $row->baseUrl) === 0

这将获取 的前缀 ,其长度最多相同,并使用 strcasecmp 进行不区分大小写的比较。$_SERVER["SCRIPT_NAME"]$row->baseUrl

但是如果你想在PHP的PCRE函数中使用正则表达式,你需要使用分隔符(这里就像你尝试的那样)并正确引用值:/

"/^".preg_quote($row->baseUrl, "/")."/i"
0赞 Cobby 2/11/2011 #2

正如 Gumbo 所建议的,您不需要为您的特定问题使用正则表达式。但是,您应该使用 stripos() 来搜索字符串。

<?php
// script name is at the start of the string
stripos("{$_SERVER['SCRIPT_NAME']}/", $row->baseUrl) === 0; 
// or; string name exists within the string
stripos("{$_SERVER['SCRIPT_NAME']}/", $row->baseUrl) !== false;

您还可以使用 strpos(),它是区分大小写的等效项。

如果要使用preg_match则正则表达式应为:

preg_match("#^{$_SERVER['SCRIPT_NAME']}/#i", $row->baseUrl) === 1