3

$_GET['page']仅当参数具有文本“ mytext- ”时,我才需要执行一些脚本

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

这是返回 0:

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

5 回答 5

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

?>
于 2012-07-11T13:12:08.007 回答
1

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

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

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

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

$match = str_replace( 'mytext-', '', $myPage);
于 2012-07-11T12:53:38.360 回答
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数据,因为用户可以直接输入它们并可能将有害代码注入您的网站。

于 2012-07-11T12:54:04.990 回答
0

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

警告

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

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

if(stristr($myPage, 'mytext-') !== false) {
   // contains..
}
于 2012-07-11T12:53:49.807 回答
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

于 2012-07-11T13:04:31.683 回答