Подтвердить что ты не робот

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

StrPos

Функция

может возвращать Boolean FALSE, но может также возвращать небулево значение, которое вычисляется как FALSE.

Итак, мне понравилось это

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