0

我不确定我的问题在哪里。我有一个使用参数(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];
    }
}

问题:调用 url 时发生了什么:

http://www.xxx.com?isms_restemsg=&value=1

在这种情况下,eregi 指令发生了什么。

我问这个问题是因为 $found_keyword="N",它应该是 "Y" 还是有错误?

如果是,你能帮帮我吗?

4

4 回答 4

2

从 php 5 开始,eregi 已贬值。

改用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";
}
于 2011-03-01T10:11:24.180 回答
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";
}
于 2011-03-01T10:13:49.063 回答
0

你不应该使用eregi(),因为它已被弃用

毕竟,它甚至看起来都不需要正则表达式。

尝试使用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"]));
}
于 2011-03-01T10:10:29.453 回答
0

当 URL 是这样的

http://www.xxx.com?isms_restemsg=&value=1

$_GET["isms_restemsg"]的是空白

因此 if (eregi($keyword_allowed[$i], $_GET["isms_restemsg"]))

第二个参数在eregi函数中作为 null 传递

eregi已弃用 停止使用它 替换为preg_match

于 2011-03-01T10:11:53.323 回答