$ _GET值或eregi错误?

时间:2011-03-01 10:04:06

标签: php get eregi

我不确定我的问题在哪里。我有一个带参数(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”还是有错误?

如果是,你可以帮助我吗?

4 个答案:

答案 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函数

中作为null传递 不推荐使用

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";
}