2011-02-01 2 views
17

Почему это не автономный код рабочий:Простая функция PHP strpos не работает, почему?

$link = 'https://google.com'; 

$unacceptables = array('https:','.doc','.pdf', '.jpg', '.jpeg', '.gif', '.bmp', '.png'); 

foreach ($unacceptables as $unacceptable) 
{ 
     if (strpos($link, $unacceptable) === true) { 

      echo 'Unacceptable Found<br />'; 

     } 
     else { 

      echo 'Acceptable!<br />'; 

     } 
} 

Это печать приемлемо каждый раз, даже если протокол HTTPS содержится в переменной $ ссылке.

ответ

51

В случае сомнений, прочитал the docs:

[StrPos] Возвращает числовую позицию первого вхождения иглы в строке стога.

Итак, вы хотите попробовать что-то больше, как:

// ... 
if (strpos($link, $unacceptable) !== false) { 

Потому что в противном случае strpos возвращается номер, и вы ищете булевой true.

+1

хаха бить меня к удару –

7

strpos() не возвращает true, когда находит совпадение, возвращает позицию первой соответствующей строки. Watchout, если совпадение является началом строки, оно возвращает индекс нуля, который будет сравниваться как равный false, если вы не используете оператор ===.

5

Неправильное состояние неисправности.

StrPos возвращает ложь, если совпадение не найдено, поэтому вы должны явно проверить

if (strpos($link, $unacceptable) !== false) { 
1

StrPos всегда возвращает позицию, как вы будете искать «httpsL» в строке («https://google.com»;), то он возвращает 0-ю позицию, а PHP оценивает ее как ложную.

смотрите по этой ссылке: (очень надеюсь, его полезные для вас): http://php.net/manual/en/function.strpos.php

0
if (strpos($link, $unacceptable)) 
{ 
} else { 
    /* What you want to do when it is false */ 
} 
0

StrPos

функция может возвращать как логическое значение FALSE, но может также возвращать не-логическое значение, которое приводится к ЛОЖНЫЙ.

Так что я сделал, как этот

if (strpos($link, $unacceptable) !== false) { 
    //Code 
} 
Смежные вопросы