检测并转换用户输入的文本中的网址

时间:2019-03-26 21:41:31

标签: php url mysqli

问题:
从用户键入的文本(包括bbcode和纯文本)中识别并转换URL。
因为可能会有使用bbcode函数的用户和不使用bbcode函数的用户。

用户可以在我自己创建的论坛中输入的文本示例:

  

嗨,我是Paul。
快来访问我的俱乐部“ PAUL SOCCER CLUB ”。
  看一下:
www.notrealwebsite.com/team.php?tmid=1

  别忘了访问我的网站[url] www.example.com [/ url]

我需要拦截这两个链接并将它们转换为可点击的链接。
可能使它们指向我的域之外(即使它们是在没有协议的情况下编写的)。

一旦用户输入了他们的文本,在通过以下代码处理文本后,我会将其存储在MySQLi数据库中:

...
$new_post=$_POST[text];
$new_post = str_replace("
","<br>",$new_post);

$new_post=addslashes($new_post);
$new_post=mysqli_real_escape_string($dbconnection3, $new_post);
...

然后,为了在论坛上展示它,我从数据库中获取了文本,并使用此文件(命名为 textpost.php )对其进行了处理,以使其易于读取:

<?

$textpost=str_replace("[quote]", "<div id='quote'><hr class='quote'><font size='1'>", "$textpost");
$textpost=str_replace("[/quote]", "</font><br><hr class='quote'></div><div id='clear'></div><br>", "$textpost");

$textpost=str_replace("[b]", "<b>", "$textpost");
$textpost=str_replace("[/b]", "</b>", "$textpost");
$textpost=str_replace("[u]", "<u>", "$textpost");
$textpost=str_replace("[/u]", "</u>", "$textpost");
$textpost=str_replace("[i]", "<i>", "$textpost");
$textpost=str_replace("[/i]", "</i>", "$textpost");
$textpost=str_replace("[s]", "<s>", "$textpost");
$textpost=str_replace("[/s]", "</s>", "$textpost");

$pattern = '~\[img(?|=[\'"]?([^]"\']+)[\'"]?]([^[]+)|](([^[]+)))\[/img]~';
$replacement = '<img src="$1" title="$2" style="max-width:400px; max-height:400px;"><br><font size="1">$2</font>';
$textpost = preg_replace($pattern, $replacement, $textpost);

$pattern = '~\[url(?|=[\'"]?([^]"\']+)[\'"]?]([^[]+)|](([^[]+)))\[/url]~';
$replacement = '<a href="$1" title="$2" target="blank">$2</a>';
$textpost = preg_replace($pattern, $replacement, $textpost);

$pattern = '#(?<![>/"])(((http|https|ftp)://)?www[a-zA-Z0-9\-_\.]+)#im';
$replacement = '<a href="$1" title="$1" target="blank">$1</a>';
$textpost = preg_replace($pattern, $replacement, $textpost);

?>

我需要帮助来正确检测在[url] [/ url]和外部bbcode标记之间键入的URL(尤其是如果未写在纯文本的第一行)**。

0 个答案:

没有答案