PHP - Preg заменить URL-адреса из-за сбоя строки - PullRequest
0 голосов
/ 26 декабря 2011

Это моя функция:

    function makeClickableLinks($s) {
  return preg_replace('@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@', '<a href="$1" target="_blank">$1</a>', $s);
}


$description = $_POST['description'];

echo makeClickableLinks($description);

$ _ POST ['description'] - это текстовая область формы, которая будет позже вставлена ​​в таблицу MySQL.

Я хочу разрешить пользователям создавать ссылки в этом поле ввода. Когда я использую эту функцию, пользователь вводит данные, которые выглядят так:

Whats up guys. Here's my website! Please check it out!!
<a href="google.com">hi</a>

Теперь ссылка активна, но ссылки на:

http://(myurl).com/google.com

Он считает, что ссылка является подкаталогом. Есть идеи? Спасибо!

Ответы [ 2 ]

0 голосов
/ 26 декабря 2011

Как я понимаю, вы хотите организовать что-то вроде замены ссылок в записях пользователя, чтобы они ссылались на ваш сайт.Лоток это регулярное выражение:

<?php
$str = "Whats up guys. Here's my website! Please check it out!!
<a href='google.com'>hi</a> and something:)";

echo preg_replace("/(<a[^<]* href=['\"])(http:\/\/|https:\/\/)?([^\"]*?)(['\"][^<]*>)/is", "$1mysite.com/$3$4", $str);
0 голосов
/ 26 декабря 2011

Это проблема относительной связи. в вашей функции makeClickableLinks ($ s) вы должны проверить, начинается ли ссылка с http или https, если не добавляете http: // вместе с ней. найти пример ниже.

function makeClickableLinks($s) {
    $link = ( strpos($s, 'http://') === 0 || strpos($s, 'https://') === 0) ? '' : 'http://'.$s;
    return $link;
}
...