【问题标题】:PHP - strstr() returns false but the $haystack contains the $needlePHP - strstr() 返回 false 但 $haystack 包含 $needle
【发布时间】:2018-09-15 21:34:19
【问题描述】:

这是一个非常奇怪的错误,我正在尝试修复它但没有成功。 我正在尝试检查链接是否包含字符串:

$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
echo $actual_link;

输出是:

http://xxx.xxx.xxx.xxx/plesk-site-preview/***********.com/xxx.xxx.xxx.xxx/

然后:

if(strstr($actual_link,"plesk-site-preview")  ){
echo"<meta name='robots' content='noindex'>";
}

问题是尽管plesk-site-preview 包含在http://xxx.xxx.xxx.xxx/plesk-site-preview/***********.com/xxx.xxx.xxx.xxx/ 中,但strstr 返回false。

我该如何解决这个错误?

编辑:

我在if(strstr($actual_link,"plesk-site-preview") ){ 之前插入了以下行用于测试目的:

$actual_link='http://xxx.xxx.xxx.xxx/plesk-site-preview/***********.com/xxx.xxx.xxx.xxx/';

现在代码可以运行了!似乎在 IF 语句之前分配给变量 $actual_link 的字符串丢失了。

【问题讨论】:

  • 试试if(strstr($actual_link,"plesk-site-preview") !== FALSE ){
  • @NineBerry 我已插入您的代码,但错误仍然存​​在!请注意,我的代码是准确的,echo $actual_link;IF 语句之间没有更多代码行。
  • 你找到这个问题的答案了吗?
  • @Mawg,不,我无法修复此错误。
  • 您是否尝试使用 !== False 检查结果?这应该工作

标签: php html string url strstr


【解决方案1】:

documentaion

string strstr (string $haystack , mixed $needle [, bool $before_needle = FALSE ])

返回 haystack 字符串的一部分,从第一个开始并包括第一个 大海捞针的发生。

返回字符串的部分,如果没有找到 needle,则返回 FALSE。

你编码

if(strstr($actual_link,"plesk-site-preview")) 

应该是这样的

if(strstr($actual_link,"plesk-site-preview") != "") 

因为它返回一个字符串,如果成功则不是布尔值。

嗯,其实这样会更好

 if(strstr($actual_link,"plesk-site-preview") !== FALSE)

【讨论】:

  • 要使用严格的类型检查,请使用!==
  • @Mawg 我已经用if(strstr($actual_link,"plesk-site-preview" != FALSE) ) 替换了我的代码,但错误尚未修复!另请注意,您在代码中忘记了)
  • @NineBerry 是正确的,!= 应该是 !==。这里的重点是许多 PHP 函数返回 FLASE 失败,正确的测试方法是!== FALSE;这是一种常见的模式
  • 当然,如果您使用调试器,您就不必问我们这个问题了 :-)
【解决方案2】:

如果您需要检查字符串中是否存在子字符串,则可以使用strpos,例如:

if(strpos($actual_link, "plesk-site-preview")){
    echo"<meta name='robots' content='noindex'>";
}

这种方式比较好,因为strpos比strstr快

【讨论】:

  • 我用你的代码试过了,但是错误还没有解决!
  • @Daniele,这个条件是正确的。你可以检查一下,例如:if(strpos($actual_link, "plesk-site-preview")){ echo "Substing finded"; }你应该检查其他代码。
  • @Daniele,我已经测试过了。我的代码:$actual_link = "http://84.200.70.56/plesk-site-preview/***********.com/84.200.70.56/"; if(strpos($actual_link,"plesk-site-preview") ){ echo "Substring found"; } 并且有效
  • 尝试在 if 语句之前打印 $actual_link 变量
  • strpos($actual_link, "plesk-site-preview") !== FALSE 会解决你的问题
猜你喜欢
  • 2015-12-25
  • 1970-01-01
  • 2017-04-16
  • 1970-01-01
  • 2018-12-02
  • 2011-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多