PHP strpos匹配querystring文本模式


PHP strpos to match querystring text pattern

只有当$_GET['page']参数具有文本"mytext-"时,我才需要执行一点脚本

查询字符串为:admin.php?page=mytext-option

这将返回0:

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

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';
}
?>

一旦获得'mytext-'的位置,就使用substr(),如下所示:

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

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

如果您的字符串只有一次'mytext-',您也可以使用str_replace()来实现这一点:

$match = str_replace( 'mytext-', '', $myPage);
函数strpos()返回搜索字符串的起始位置,即0。如果找不到字符串,函数将返回false。请参阅告诉您的strpos文档:

警告此函数可能返回布尔值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

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

然而,您也应该小心处理原始$_GET$_POST数据,因为用户可以直接输入这些数据,并可能向您的网站注入有害代码。

由于子字符串从索引0开始,因此这是意料之中的事。阅读php.net/strpos:上的警告

警告

此函数可能返回布尔值FALSE,但也可能返回计算结果为FALSE的非布尔值。请阅读布尔值可获取更多信息。使用===运算符测试此函数的返回值。

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

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

preg_match有什么问题?

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

还是需要"mytext选项"中的"选项"?

如果是,你可以使用这个:

$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