提问人:Epiphanisation 提问时间:2/11/2011 最后编辑:BenMorelEpiphanisation 更新时间:5/18/2014 访问量:200
弃用 Eregi 的问题
issue with eregi being deprecated
问:
我已经升级了 PHP,现在我收到了 eregi 弃用的错误。
我在网上进行了一些搜索,发现我可以改用 preg,但不确定如何正确更改此代码
eregi("^$row->baseUrl", $_SERVER["SCRIPT_NAME"])
我的尝试是:
preg_match("^$row->baseUrl/i", $_SERVER["SCRIPT_NAME"])
但我不确定这是否正确。
有人可以检查和建议吗?
答:
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
评论