Почему этот автономный код не работает:
$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.
В случае сомнений прочитайте документы :
[strpos] Возвращает числовое положение первого появления иглы в строке стога сена.
Поэтому вы хотите попробовать нечто большее:
// ... if (strpos($link, $unacceptable) !== false) {
Потому что иначе strpos
возвращает число, и вы ищете логическое значение true
.
strpos () не возвращает true, когда находит совпадение, возвращает позицию первой соответствующей строки. Watchout, если совпадение является началом строки, оно возвращает индекс нуля, который будет сравниваться как равный false, если вы не используете оператор ===.
Неправильное состояние отказа.
strpos возвращает false, если совпадение не найдено, поэтому вам нужно явно проверить
if (strpos($link, $unacceptable) !== false) {
Строфы всегда возвращают позицию, подобную поиску «httpsL» в вашей строке («https://google.com»;), тогда она возвращает 0-ю позицию, а PHP оценивает ее как ложную.
см. эту ссылку: (Надеюсь, что это очень полезно для вас): http://php.net/manual/en/function.strpos.php
if (strpos($link, $unacceptable)) { } else { /* What you want to do when it is false */ }
StrPos
функция может возвращать Boolean FALSE, но может также возвращать небулевое значение, которое вычисляется как FALSE.
Поэтому мне это понравилось
if (strpos($link, $unacceptable) !== false) { //Code }