首页 > 解决方案 > PHP preg_replace - 从句子中替换各种 URL 的所有实例

问题描述

我真的很头疼要制作正确的 php preg_replace 代码以从文本内容中删除所有可能的 URL 术语......我想防止垃圾邮件发送者在我的网站上发布内容/评论时甚至提到他们的 URL(这将承载很多贡献者)。

URL 术语类型的示例:

https://www.example.com
http://www.example.com
www.example.com
subdomain.example.com
www.subdomain.example.com
example.com

首段:

https://www.subdomain.example.com这是第一个内部虚拟句子。https://www.subdomain.example.com这是第二个内部虚拟句。https://www.subdomain.example.com

应转换为本段:

这是第一个内部虚拟句子。这是第二个内部虚拟句。

.

我认为最简单的方法是匹配最后一个 .tld(点 tld)和 .tld(点 tld)之前的任何内容。请理解,tld 可以是 .net 或 .anything ...

我能够找到要删除的代码,<a href="/">link</a>如下所示:

function remove_html_link($link) {
$end = preg_replace('#<a.*?>.*?</a>#i', '', $link);
return $end;
}

但是,如何为PLAIN URL(未链接,即普通文本)制作 preg_replace呢?

提前感谢大家的解决方案!

因此,我的案例的最终最佳工作代码片段来自:

@user3783243 - 用于特定/更新的 TLD 列表

"/(?:https?:\/\/(?:www\.)?)?[a-z.\/\d-]+\.(com|net|org)\b/"

用户冒泡……或冒泡…… - 适用于所有 TLD

"/\S+\.[a-z]+ */"

非常感谢大家的帮助,我没想到解决方案这么快!

干杯,贝特里奥。

标签: phpregex

解决方案


<?php



$data1='https://www.example.com';
$data2='http://www.example.com';
$data3='www.example.com';
$data4='www.subdomain.example.com';



$text = $data1.' This is the FIRST inner dummy sentence ';
$text .= $data2.' This is the SECOND inner dummy sentence ';
$text .= $data3.' This is the THIRD inner dummy sentence ';
$text .= $data4.' This is the FORTH inner dummy sentence ';

$string = preg_replace('/\b((https?|ftp|file):\/\/|www\.)[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i', ' ', $text);



echo $string;

上面的代码将从您拥有的任何句子中删除我在变量中设置的 url 类型。

输出是:这是第一个内部虚拟语句 这是第二个内部虚拟语句 这是第三个内部虚拟语句 这是第四个内部虚拟语句


推荐阅读