PHP - strstr () возвращает false, но $ haystack содержит $ needle - PullRequest
0 голосов
/ 16 сентября 2018

Это очень странная ошибка, я пытаюсь исправить ее безуспешно. Я пытаюсь проверить, содержит ли ссылка строку:

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

Проблема в том, что strstr возвращает false, несмотря на то, что подстрока plesk-site-preview содержится в http://xxx.xxx.xxx.xxx/plesk-site-preview/***********.com/xxx.xxx.xxx.xxx/.

Как я могу исправить эту ошибку?

EDIT:

Я вставил перед if(strstr($actual_link,"plesk-site-preview") ){ следующую строку для целей тестирования:

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

Теперь код работает! Кажется, что строка, присвоенная переменной $ actual_link, теряется перед оператором IF.

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Если вам нужно проверить наличие в строке подстроки в строке, вы можете использовать strpos , например:

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

Этот способ лучше, потому что strpos быстрее, чем strstr

0 голосов
/ 16 сентября 2018

Документ говорит

строка strstr (строка $ стог сена, смешанная $ needle [, bool $ before_needle = FALSE])

Возвращает часть строки стога сена, начиная с первого появление иглы до конца стога сена.

Возвращает часть строки или FALSE, если игла не найдена.

И вы код

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

Возможно, это должно быть

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

, поскольку возвращает строку, а не логическое значение в случае успеха.

Хм, на самом деле было бы лучше

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