Добавить http:// в начало отправленного URL-адреса

#php

#php

Вопрос:

Я ищу лучший способ добавить http: // к отправленному URL-адресу. У меня есть сайт, который позволяет пользователям отправлять URL-адрес своего веб-сайта при регистрации, проблема в некотором типе пользователя «example.com » некоторые пользователи вводят «www.example.com » и некоторый тип «http (ы)://example.com «

Чего я хотел бы достичь, так это убедиться, что конечным результатом будет «http (ы)://example.com » независимо от того, что они отправляют.

Есть ли какой-либо способ сделать это и при этом учитывать другие вещи, такие как co.uk или https?

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

1. Извините, я должен был включить это, я ищу что-то, что работает с php.

Ответ №1:

На самом деле вам не нужно РЕГУЛЯРНОЕ выражение. РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ часто обходятся очень дорого. Вот самодельная функция, которая достигает вашей цели:

 function fix_url($url) {
    return (substr($url, 0, 7) == 'http://' || substr($url, 0, 8) == 'https://')
        ? $url 
        : 'http://'.$url;
}
  

Примеры:

 $url = 'example.com';
$url1 = 'httpexample.com';
$url2 = 'http://example.com';
$url3 = 'https://example.com';

echo fix_url($url);
echo '<br>';
echo fix_url($url1);
echo '<br>';
echo fix_url($url2);
echo '<br>';
echo fix_url($url3);
echo '<br>';
  

Вывод:

 http://example.com
http://httpexample.com
http://example.com
https://example.com
  

Если у вас есть какие-либо сомнения, пожалуйста, рассмотрите возможность добавления комментария ниже.

Ссылки:

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

1. что, если предоставленный URL-адрес использует протокол, отличный от http?

2. @Ryan, в OP об этом не упоминалось.

3. Это должно сработать просто отлично для того, что мне нужно, большое вам спасибо!

Ответ №2:

Для учета http (ов):// это очень просто, поскольку есть только два варианта проверки. т. е. проверьте, начинается ли ссылка с «http://» или «https://», если нет, то добавьте «http://».

Другая часть вашего вопроса, которая должна учитываться «.co.uk «, вы можете либо собрать все доступные суффиксы в словаре, что является очень плохой идеей, либо вы можете просто проверить наличие «.», оставив то, что идет после «.», на усмотрение пользователя.

Надеюсь, я ответил на ваш вопрос 🙂

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

1. Да, я бы определенно предпочел оставить что-либо после «.» Я полагаю, что решение за пользователем, если они хотят, чтобы люди находили их сайт, они должны убедиться, что он правильный. что касается поиска http (ов), должен ли я делать это с помощью regex? Я видел много регулярных выражений, и я еще недостаточно опытен, чтобы знать, какое из них будет работать, кажется, что существуют тысячи регулярных выражений, все разные. Эта часть важна, потому что она определяет, как я ссылаюсь на их сайт, когда кто-то вводит example.com , это просто создает ссылку типа MySite.com/example.com что, конечно, никуда не годится.

2. Нет необходимости в регулярных выражениях, это дорого, и в вашем случае здесь очень простое сопоставление строк. Что касается «MySite.com/example.com «Теперь у вас есть способ проверить, является ли сайт неправильным или нет, но простые проверки, такие как проверка на наличие нескольких точек, точки с запятой … и т.д., могут помочь вам найти сайты с ошибками и уведомить пользователя. Кроме этого, я не верю, что вы можете проверить правильность всех входных URL-адресов 🙂

Ответ №3:

для php,

 $str = preg_replace('/(?m)^(?!https?://. )(S )/',"http://$1",$str);
  

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

1. Спасибо за ваше время, есть ли код, который работал бы с php? Я совершенно забыл сказать, что я работал с php в своем первоначальном сообщении.

2. @Charlie тег php был отредактирован постфактум. В исходном вопросе не упоминался язык.

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

4. @Davy8, спасибо за вашу законную поддержку. Как вы сказали, в исходном вопросе упоминалось о целевом языке. А также, поскольку я не знаю php, поиск php-решения занимает много времени.

5. @Gursel, @Davy8, Это действительно просто: если вы удалите ответ, репутация автоматически вернется к тому, что было до моего понижения. Вместо этого мой downvote довольно необходим, поскольку этот ответ больше не принимается для такого вопроса. Это не на благо вам или OP, это на благо SO и пользователей, которые будут просматривать эти вопросы после нас в поисках той же проблемы, находя ответы, которые просто не соответствуют вопросу.

Ответ №4:

Простой способ исправить ваш URL 🙂

 function addHttp( $url )
{
    if ( !preg_match("~^(?:f|ht)tps?://~i", $url) )
    {
        $url = "http://" . $url;
    }

    return $url;
}
  

Ответ №5:

Найдите «http» и «https» в отправленном URL-адресе, если поиск вернул null, добавьте «http» в начало. С помощью Javascript: var mystring=»example.com «; var normal=-1; var secured=-1; normal=mystring.search(/http/i); secured=mystring.search(/https/i); и так далее

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

1. Вопрос, не связанный с javascript