我不确定我的问题在哪里。我有一个带参数(GET)的脚本,如:
http://www.xxx.com?isms_restemsg=STOP&value=1
这是我的代码:
$keyword_allowed = array("STOP", "");
$found_keyword = "N";
$keyword_cf = "";
for($i=0; $i < 2; $i++)
{
if (eregi($keyword_allowed[$i], $_GET["isms_restemsg"]))
{
$found_keyword = "Y";
$keyword_cf = $keyword_allowed[$i];
}
}
问题:调用网址时发生的事情是:
http://www.xxx.com?isms_restemsg=&value=1
在这种情况下,eregi指令发生了什么。
我问这个问题是因为$ found_keyword =“N”,它应该是“Y”还是有错误?
如果是,你可以帮助我吗?
答案 0 :(得分:2)
eregi从php 5开始折旧。
使用stristr代替
if (stristr($keyword_allowed[$i], $_GET["isms_restemsg"]))
或者更好,array_search
$keyword_allowed = array("STOP", "");
$found_keyword = "N";
if(($keyword_c = array_search($_GET["isms_restemsg"], $keyword_allowed)) !== false) {
$found_keyword = "Y";
}
答案 1 :(得分:0)
您不应该使用eregi()
,因为它是deprecated。
毕竟,它看起来好像不需要正则表达式。
尝试使用stristr()
或甚至简单的比较语法:
if ($keyword_allowed[$i] == $_GET["isms_restemsg"])
(如果你自己写这个,你也可以控制GET值。)
您可以通过回显一些调试输出来帮助自己:
print_r($_GET);
for($i=0; $i < 2; $i++)
{
echo eregi($keyword_allowed[$i], $_GET["isms_restemsg"]));
}
答案 2 :(得分:0)
当网址如下时
http://www.xxx.com?isms_restemsg=&value=1
您的$_GET["isms_restemsg"]
为空
因此if (eregi($keyword_allowed[$i], $_GET["isms_restemsg"]))
第二个参数在eregi
函数
eregi
停止使用preg_match
替换
答案 3 :(得分:0)
我还不太确定,但可能还有其他方法可以实现您的目标。
首先,您可以使用更具体的正则表达式来摆脱循环。这将检查两个备选项,STOP和空字符串(这可能是您的eregi
测试失败的原因。)
if (preg_match('/^(STOP | )$/ix', $_GET["isms_restemsg"], $r))
{
$found_keyword = "Y";
$keyword_cf = $r[0];
}
else {
$found_keyword = "Y";
}
或者,因为您只需要检查两个值:
if (in_array(strtoupper($_GET["isms_restemsg"]), array("STOP", "")) {
$found_keyword = "Y";
}