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

У меня есть ввод, в который вы вводите 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; }