2013-06-17 3 views
8

На моем сайте пользователи могут размещать URL-адрес в своем профиле.Как заставить HTML-ссылку быть абсолютной?

Этот URL-адрес может быть http://www.google.com или www.google.com или google.com.

Если я просто вставляю свой код PHP <a href="$url">$url</a>, ссылка не всегда является абсолютной.

Как я могу заставить тег a быть абсолютным?

+2

Убедитесь, что он всегда имеет префикс 'http: //' (или '//' для ссылки на протокол) –

+1

Вы можете попробовать использовать window.location . Но лучше всего проверить вход пользователя. Попросите их предоставить действительный URL. – ysrb

ответ

5

Используйте протокол, предпочтительно Http: //

<a href="http://www.google.com">Google</a> 

Попросите пользователей ввести URL в этом формате, или конкатенации Http: // если не добавляется.

3

Мне недавно пришлось сделать что-то подобное.

if (strpos($url, 'http') === false) { 
    $url = 'http://' .$url; 
} 

В принципе, если URL не содержит «HTTP» добавить его в передней части строки (префикс).

Или мы можем сделать это с RegEx

$http_pattern = "/^http[s]*:\/\/[\w]+/i"; 

if (!preg_match($http_pattern, $url, $match)){ 
    $url = 'http://' .$url; 
} 

Спасибо @JamesHilton за указание на ошибку. Спасибо!

+1

Это всегда будет возвращать false, потому что если он найдет http в начале $ url, он вернет 0, потому что позиция строки 'http' начинается с индекса 0. 0 считается ложным в выражении if, поэтому вам нужно используйте вместо этого оператор ===. –

+0

@JamesHilton Aw jeez как смущающе! Исправлено, спасибо! – StephanieQ

+0

Возможно, это было бы лучше RegExp, если вы используете: ''/^ https?: \/{2} \ w/i "' – eddy85br

6

Если вы префикс URL с //, он будет рассматриваться как абсолютный. Например:

<a href="//google.com">Google</a>.

Имейте в виду, что это будет использовать тот же протокол, на котором выполняется страница (например, если URL вашей страницы: https://path/to/page, итоговый URL-адрес будет https://google.com).

+0

Вы также должны указать, что если абсолютный URI указан только с двумя косой чертой, тогда протокол текущего сайта будет использоваться при подключении к URL-адресу профиля, т. е. https://yoursite.net приведет к https://google.com, а http://yoursite.net приведет к http: // google.com –

+0

Да, что подходит к делу в вопросе. Кстати, ваши ссылки сломаны (разбор). –

+0

Это не работает, если ваш протокол вашего сайта отличается от протокола URL. Если ваш сайт https, то http url не будет работать, потому что вместо этого ему будет присвоен https. – DeepBlue