Преобразование простых текстовых URL в HTML-ссылки в PHP - PullRequest
52 голосов
/ 25 декабря 2009

У меня есть простая система комментирования, где люди могут отправлять гиперссылки в текстовом поле. Когда я отображаю эти записи из базы данных и на веб-странице, какой RegExp в PHP я могу использовать для преобразования этих ссылок в якорные ссылки HTML-типа?

Я не хочу, чтобы алгоритм делал это с другими ссылками, только с http и https.

Ответы [ 13 ]

0 голосов
/ 16 апреля 2018
$string = 'example.com
www.example.com
http://example.com
https://example.com
http://www.example.com
https://www.example.com';

preg_match_all('#(\w*://|www\.)[a-z0-9]+(-+[a-z0-9]+)*(\.[a-z0-9]+(-+[a-z0-9]+)*)+(/([^\s()<>;]+\w)?/?)?#i', $string, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER);
foreach (array_reverse($matches) as $match) {
  $a = '<a href="'.(strpos($match[1][0], '/') ? '' : 'http://') . $match[0][0].'">' . $match[0][0] . '</a>';
  $string = substr_replace($string, $a, $match[0][1], strlen($match[0][0]));
}

echo $string;

Результат:

example.com
<a href="http://www.example.com">www.example.com</a>
<a href="http://example.com">http://example.com</a>
<a href="https://example.com">https://example.com</a>
<a href="http://www.example.com">http://www.example.com</a>
<a href="https://www.example.com">https://www.example.com</a>

Что мне нравится в этом решении, так это то, что оно также преобразует www.example.com в http://www.example.com, потому что <a href="www.example.com"></a> не работает (без протокола http/https оно указывает на yourdomain.com/www.example.com).

0 голосов
/ 13 ноября 2017

Попробуйте это:

$s = preg_replace('/(?<!href="|">)(?<!src=\")((http|ftp)+(s)?:\/\/[^<>\s]+)/is', '<a href="\\1" target="_blank">\\1</a>', $s);

Он пропускает существующие ссылки (если у нас уже есть href, он не будет добавлять href внутри href). В противном случае он добавит href с пустой целью.

0 голосов
/ 24 мая 2016

Если я прав, то вы хотите превратить обычный текст в http-ссылки. Вот что я думаю, может помочь:

<?php

   $list = mysqli_query($con,"SELECT * FROM list WHERE name = 'table content'"); 
   while($row2 = mysqli_fetch_array($list)) {
echo "<a target='_blank' href='http://www." . $row2['content']. "'>" . $row2['content']. "</a>";

   }  
?>
...