#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. Спасибо за уловку. Исправлено.