首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从PHP中的文本中提取链接,除了忽略图像链接

从PHP中的文本中提取链接,除了忽略图像链接
EN

Stack Overflow用户
提问于 2015-06-19 13:26:14
回答 3查看 94关注 0票数 0

我有这段文字,我想从中提取链接。有些链接与有标签,有些将在那里,就这样,以普通的格式。但我也有图像,我不想要他们的链接。

如何从这段文字中提取链接,但忽略图像链接。所以基本上和google.com都应该是提取的。

代码语言:javascript
复制
string(441) "<p class="fr-tag">Please visit&nbsp;https://www.google.co.uk/?gfe_rd=cr&ei=9P2DVaW2BMWo8wfK74HYCg and this <a href="https://www.google.co.uk/?gfe_rd=cr&ei=9P2DVaW2BMWo8wfK74HYCg" rel="nofollow">link</a>&nbsp;should be filtered and this&nbsp;http://d.pr/i/1i2Xu&nbsp;<img class="fr-fin fr-tag" alt="Image title" src="https://cft-forum.s3-us-west-2.amazonaws.com/uploads%2F1434714755338-Screen+Shot+2015-06-19+at+12.52.28.png" width="300"></p>"

我尝试了以下几点,但不完整:

代码语言:javascript
复制
    $dom = new DOMDocument();
    $dom->loadHTML($html);

    $tags = $dom->getElementsByTagName('a');
    foreach ($tags as $tag) {
    $hrefs[] =  $tag->getAttribute('href'); 
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-19 13:42:43

仅使用这一个字符串来测试,下面的内容对我来说是有效的:

代码语言:javascript
复制
$str =  '<p class="fr-tag">Please visit&nbsp;https://www.google.co.uk/?gfe_rd=cr&ei=9P2DVaW2BMWo8wfK74HYCg and this <a href="https://www.google.co.uk/?gfe_rd=cr&ei=9P2DVaW2BMWo8wfK74HYCg" rel="nofollow">link</a>&nbsp;should be filtered and this&nbsp;http://d.pr/i/1i2Xu&nbsp;<img class="fr-fin fr-tag" alt="Image title" src="https://cft-forum.s3-us-west-2.amazonaws.com/uploads%2F1434714755338-Screen+Shot+2015-06-19+at+12.52.28.png" width="300"></p>';

preg_match('~a href="(.*?)"~', $str, $strArr);

使用a href ="."preg_match()语句中返回一个数组,$strArr包含两个值,两个链接到preg_match()

代码语言:javascript
复制
Array
(
    [0] => a href="https://www.google.co.uk/?gfe_rd=cr&ei=9P2DVaW2BMWo8wfK74HYCg"
    [1] => https://www.google.co.uk/?gfe_rd=cr&ei=9P2DVaW2BMWo8wfK74HYCg
)
票数 1
EN

Stack Overflow用户

发布于 2015-06-19 13:33:53

我会尝试这样的方法。

查找并删除图像标记:

代码语言:javascript
复制
$content = preg_replace("/<img[^>]+\>/i", "(image) ", $content); 

找到并收集网址。

代码语言:javascript
复制
preg_match_all('#\bhttps?://[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))#', $content, $match);

输出Urls:

代码语言:javascript
复制
print_r($match);

祝好运!

票数 1
EN

Stack Overflow用户

发布于 2015-06-19 15:42:58

我玩了更多的这一点,并有一个可能更适合的答案,你正试图做一些“未来的打样”。

代码语言:javascript
复制
$str =  '<p class="fr-tag">Please visit&nbsp;www.google.co.uk/?gfe_rd=cr&ei=9P2DVaW2BMWo8wfK74HYCg and this <a href="https://www.google.co.uk/?gfe_rd=cr&ei=9P2DVaW2BMWo8wfK74HYCg" rel="nofollow">link</a>&nbsp;should be filtered and this&nbsp;http://d.pr/i/1i2Xu&nbsp;<img class="fr-fin fr-tag" alt="Image title" src="https://cft-forum.s3-us-west-2.amazonaws.com/uploads%2F1434714755338-Screen+Shot+2015-06-19+at+12.52.28.png" width="300"></p>';
$str = str_replace('&nbsp;',' ',$str);
$strArr = explode(' ',$str);
$len =  count($strArr);

for($i = 0; $i < $len; $i++){
    if(stristr($strArr[$i],'http') || stristr($strArr[$i],"www")){
        $matches[] = $strArr[$i];
    }
}

echo "<pre>";
print_r($matches);
echo "</pre>";

我回过头来分析您的字符串,并注意到如果您将&nbsp;转换为空格,则可以将字符串转换为数组,然后逐步完成,如果任何元素包含httpwww,则将它们添加到$matches数组中,以便稍后处理。输出非常干净,易于使用,而且您还可以以这种方式消除大多数html标记。

值得注意的是,这可能不是最好的方法。除了您提供的字符串之外,我还没有用任何其他字符串进行测试,因此可以进行优化。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30939368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档