У меня есть ввод, в который вы вводите URL-адрес, я в основном хочу написать некоторый php, который говорит, что если домен содержит «http: //», тогда оставьте его, иначе если нет, то добавьте его в начало. Это то, что у меня есть до сих пор …
$domain = $_POST["domain"]; if (strpos($domain, "http://")) { return $domain; } else { $domain = "http://" . $domain; }
Кажется, это не работает.
он не добавляет http: //, если он не содержит http: //.
«http: //», тогда оставьте это, иначе если нет, добавьте его в начало.
Как насчет добавления его независимо? Я считаю, что это проще:
<?php $url = 'http://www.google.com'; echo 'http://' . preg_replace( '~^http://~', '', $url );
вы забыли вернуть $ domain.
$domain = $_POST["domain"]; if (strpos($domain, "http://") !== false) { return $domain; } else { return "http://" . $domain; }
Поскольку строка начинается с http://
, strpos
вернет 0
, которая будет оцениваться как false.
Измените оператор if на:
if(strpos($domain, "http://") !== FALSE){
руководство пользователя :
Эта функция может возвращать Boolean FALSE, но может также возвращать небулевое значение, которое оценивается как FALSE, например 0 или «". Пожалуйста, прочитайте раздел о Booleans для получения дополнительной информации. Используйте оператор === для проверки возвращаемого значения этой функции.
Это связано с тем, что strpos вернет местоположение строки внутри строки. В вашем URL-адресе это 0. Это равно false. Сделайте строгую проверку – добавьте === false.
if (strpos($domain, "http://") !== false) { //return substr($domain,7); Thanks Rocket. return $domain; } else { return "http://" . $domain; }
Я знаю, что это немного поздно для вечеринки, но я предпочитаю такой подход:
if (!preg_match('#^http[s]{0,1}://#', $input)) { $input = 'http://' . $input; }
Это сохранит адрес https: //, и вы не http://https://www.mysite.com
с http://https://www.mysite.com
. Вы также можете отредактировать его, чтобы удалить https: // если у вас было правило не использовать https-адреса.
Я знаю, что первоначальный вопрос не просил об этом, но я думаю, что это важно учитывать в большинстве ситуаций и, надеюсь, поможет кому-то другому, кто придет посмотреть.
Будьте осторожны при использовании strpos (). Он будет возвращать 0, когда «http: //» находится в начале строки, в результате чего оператор if неожиданно завершится с ошибкой. Вы обязательно захотите проверить тип возврата:
$domain = $_POST["domain"]; if (FALSE !== strpos($domain, "http://")) { return $domain; } else { return "http://" . $domain; }