PHP strpos匹配查询字符串文本模式

时间:2012-07-11 12:52:10

标签: php strpos

只有当$_GET['page']参数的文本为“ mytext -

时才需要执行一些脚本

Querystring是:admin.php?page=mytext-option

这将返回0:

$myPage = $_GET['page'];
$match = strpos($myPage, 'mytext-');
echo $match;

5 个答案:

答案 0 :(得分:2)

strpos返回字符串的位置。因为它是0,这意味着它在位置0处找到,意思是在字符串的开头。

为了便于理解它是否存在,请将布尔 === 添加到if语句中,如下所示:

<?php

$myPage = $_GET['page'];
$match = strpos($myPage, 'mytext-');

if ( $match === false ) {
    echo 'Not found';
} else {
    echo 'Found';
}

?>

如果字符串存在,这将告诉您。

或者,如果您只是需要知道,如果它在那里:     

$myPage = $_GET['page'];
$match = strpos($myPage, 'mytext-');

if ( $match !== false ) {
    echo 'Found';
}

?>

答案 1 :(得分:1)

获取'mytext-'的位置后使用substr(),如下所示:

$match = substr($myPage, strpos( $myPage, 'mytext-') + strlen( 'mytext-'));

否则,strpos()将只返回字符串中'mytext-'开始的数字索引。

如果您的字符串只有'mytext-'一次,您还可以使用str_replace()来完成此操作:

$match = str_replace( 'mytext-', '', $myPage);

答案 2 :(得分:1)

函数strpos()返回搜索到的字符串开始的位置0。如果找不到该字符串,该函数将返回false。请参阅告诉您的strpos documentation

  

警告此函数可能返回布尔值FALSE,但也可能返回非布尔值,其值为FALSE。有关更多信息,请阅读有关布尔值的部分。使用===运算符测试此函数的返回值。

您的问题的解决方案是使用substr()preg_match()或检查是否strpos() !== false

最简单的解决方案应该是:

if (preg_match('/^mytext-/i', $_GET['page'])) {
    // do something
}

您还可以考虑使用多个GET参数,例如

http://www.example.com/foo.php?page=mysite&option1=123&option2=456

然后使用您的参数$_GET['page']$_GET['option1']$_GET['option2']等。

但是,您还应该小心使用原始$_GET$_POST数据,因为用户可以直接输入这些数据,并可能会向您的网站注入有害代码。

答案 3 :(得分:0)

这是预期的,因为子字符串从索引0开始。阅读php.net/strpos上的警告:

  

警告

     

此函数可能返回布尔值FALSE,但也可能返回非布尔值,其值为FALSE。请阅读有关的部分   布尔值获取更多信息。使用===运算符进行测试   返回此函数的值。

如果您只需要检查$myPage是否包含'mytext-',请使用stristr

if(stristr($myPage, 'mytext-') !== false) {
   // contains..
}

答案 4 :(得分:0)

preg_match有什么问题?

$myPage = $_GET['page'];
if (preg_match("/\bmytext-\b/i", $myPage)) {
    //Do Something
}

或者您是否需要“mytext-option”中的“选项”?

如果是,您可以使用:

$myPage = $_GET['page'];
$querystrings = explode("-", $myPage);
if ($querystrings[0] == 'mytext')) {
    //Do Something
    echo $querystrings[1]; //outputs option
}

有了这个,您甚至可以在查询字符串中使用更多“选项”,例如“mytext-option-whatever”。这与你使用时的情况相同 $_GET['page'], $_GET['option'], $_GET['whatever']
当你使用
?page=mysite&option=x&whatever=y