从混合字符串中删除所有URL(php)

时间:2010-01-12 20:08:04

标签: php

我转发了这个问题,因为我没有找到一个好的答案。

我有一个字符串,其中包含带网址的文字。

我想要一个函数从这个字符串中删除所有url,然后让文本。

例如,字符串可以包含如下:

1)嘿,看看这里:http://xxx.xxx/545df5这很好!

2)嘿,看看这里:http://www.xxx.xxx/545df5这很好!

3)嘿,看看这里:xxx.xxx/545df5这很好!

4)嘿,看看这里:www.xxx.xxx/545df5这很好!

由于

4 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

你真正需要的是一个可靠的正则表达式来查找字符串中的url,你可以preg_replace该模式没有任何东西。我可以告诉你,虽然跟踪这样的正则表达式并不容易。取决于您正在寻找的网址的变化(即http:// vs https:// vs ftp://)您可能会遇到真正的麻烦,试图解释所有这些。

Here is a page that I found to be a good start though

答案 2 :(得分:0)

正如前面所讨论的那样,正则表达式是可行的。找到一个并不是那么难(google:url regex pattern)返回的一个例子是

http://www.geekzilla.co.uk/View2D3B0109-C1B2-4B4E-BFFD-E8088CBC85FD.htm

我还建议您使用众多优秀的在线正则表达式测试人员之一来测试您的正则表达式。我最喜欢的(非java)是

http://www.regextester.com/

答案 3 :(得分:0)

这个函数应该这样做(假设你的字符串用空格“”分隔):

function isValidURL($url) {
    return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url);
}

function cleanUpUrls($urls) {
    $urlArray = explode(' ',$urls);
    $resultArray = array();
    foreach ($urlArray as $url) {
        if(!isValidURL($url)) {
            $resultArray[] = $url;
        }
    }
    return implode(' ',$resultArray);
}