Простая функция PHP strpos не работает, почему? - PullRequest
19 голосов
/ 01 февраля 2011

Почему этот автономный код не работает:

$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 содержится в переменной $link.

Ответы [ 6 ]

56 голосов
/ 01 февраля 2011

В случае сомнений прочитайте документы :

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

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

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

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

8 голосов
/ 01 февраля 2011

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

6 голосов
/ 01 февраля 2011

Ваше условие отказа неверно.

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

if (strpos($link, $unacceptable) !== false) {
1 голос
/ 01 февраля 2011

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

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

0 голосов
/ 28 ноября 2016

StrPos

функция может возвращать логическое значение FALSE, но также может возвращать и не логическое значение, которое оценивается как FALSE.

Так я и сделал

if (strpos($link, $unacceptable) !== false) {
    //Code
}
0 голосов
/ 19 марта 2014
if (strpos($link, $unacceptable))
{
} else {
    /* What you want to do when it is false */
}
...