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

3

如果$_GET['page']参数包含文本 "mytext-",我需要执行一段脚本。

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

下面的代码返回0:

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

2

strpos函数返回字符串的位置。由于它返回了0,这意味着它被找到在字符串的起始位置。

为了更容易理解是否存在该字符串,可以将布尔值===添加到if语句中,如下所示:

<?php

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

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

?>

这将让您知道字符串是否存在。

Or, if you just need to know, if it's there:

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

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

?>


1

一旦您获取了'mytext-'的位置,就可以使用substr(),如下所示:

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

否则,strpos() 将只返回字符串中 'mytext-' 开始的数字索引。
如果您的字符串只有一个 'mytext-',您也可以使用 str_replace() 来完成此操作:
$match = str_replace( 'mytext-', '', $myPage);

1

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

然后,您可以使用您的参数,例如$_GET['page']$_GET['option1']$_GET['option2']等。

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


0

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

警告

此函数可能返回布尔值FALSE,但也可能返回一个非布尔值,该值会被解释为FALSE。请阅读有关布尔值的部分以获取更多信息。使用===运算符测试此函数的返回值。

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

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

0

preg_match有什么问题吗?

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

或者你需要从 "mytext-option" 中提取 "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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接