если http: // находится в строке, то оставьте его, иначе, если не добавьте его

#php

#php

Вопрос:

У меня есть входные данные, которые вы вводите в URL, я в основном хочу написать какой-нибудь php, который говорит, что если домен содержит «http: //», то оставьте это как есть, иначе, если нет, то добавьте его в начало. Это то, что у меня есть на данный момент…

 $domain = $_POST["domain"];

if (strpos($domain, "http://")) {
return $domain;
} else {
$domain = "http://" . $domain;
}
  

Похоже, это не работает..

он не добавляет http:// on, если он не содержит http://.

Комментарии:

1. Почему один возвращает $domain , а другой изменяет свое значение?

Ответ №1:

вы забыли вернуть $domain.

 $domain = $_POST["domain"];

if (strpos($domain, "http://") !== false) {
return $domain;
} else {
return "http://" . $domain;
}
  

Ответ №2:

Поскольку строка начинается с http:// , strpos вернется 0 значение, которое будет равно false.

Измените оператор if на:

 if(strpos($domain, "http://") !== FALSE){
  

Ответ №3:

«http: //» тогда оставьте это как есть, иначе, если нет, то добавьте его в начало.

Как насчет добавления, добавляющего его независимо? Я считаю, что это проще:

 <?php
$url = 'http://www.google.com';
echo 'http://' . preg_replace( '~^http://~', '', $url );
  

Комментарии:

1. возможно, объяснение, пожалуйста?

Ответ №4:

прочитайте руководство:

Эта функция может возвращать логическое значение FALSE, но также может возвращать не логическое значение, которое принимает значение FALSE, такое как 0 или «». Пожалуйста, прочитайте раздел о логических значениях для получения дополнительной информации. Используйте оператор === для проверки возвращаемого значения этой функции.

Ответ №5:

Это потому, что strpos вернет местоположение строки внутри строки. В вашем URL это 0. Что равно false . Сделайте это строгой проверкой — добавьте === false .

Ответ №6:

 if (strpos($domain, "http://") !== false) {
//return substr($domain,7); Thanks Rocket. 
return $domain;
} else {
return "http://" . $domain;
}
  

Комментарии:

1. != false должно быть !== false . Если строка начинается с http:// , strpos вернется 0 значение, равное false .

2. Что за substr вызов?

3. Это было из-за недоразумения, функция substr используется здесь для удаления символов http, но я предполагаю, что AJFMEDIA не хочет, чтобы это было удалено. итак, я собираюсь отредактировать ответ!

Ответ №7:

Я знаю, что это немного поздно для вечеринки, но я предпочитаю этот подход:

 if (!preg_match('#^http[s]{0,1}://#', $input)) {
    $input = 'http://' . $input;
}
  

Это сохранит адрес https: //, и в итоге вы не получите http://https://www.mysite.com . Вы также могли бы дополнительно отредактировать его, чтобы исключить https://, если у вас было правило не использовать адреса https.

Я знаю, что в исходном вопросе этого не требовалось, но я думаю, что это важно учитывать в большинстве ситуаций, и, надеюсь, поможет кому-то еще, кто придет искать.

Ответ №8:

Будьте осторожны при использовании strpos(). Он вернет 0, когда ‘http: //’ будет найден в начале строки, что приведет к неожиданному сбою вашего оператора if. Вы захотите проверить тип возвращаемого значения, чтобы быть уверенным:

 $domain = $_POST["domain"];

if (FALSE !== strpos($domain, "http://")) {
    return $domain;
} else {
    return "http://" . $domain;
}
  

Комментарии:

1. Привет, strpos вернет местоположение первого вхождения или false, если его там нет. Это означает, что он никогда не вернет значение bool true.

2. strpos НИКОГДА не возвращается TRUE . Это вернет местоположение строки или FALSE если не найдено.

3. Спасибо за уловку. Исправлено.