【问题标题】:php find and remove from content img stringphp从内容img字符串中查找并删除
【发布时间】:2015-11-26 15:34:52
【问题描述】:

我有一个小问题,我怎样才能找到以dealer.jpg结尾的img src字符串并从我的内容中只删除这个字符串?例如:

<?php
$content = '<b>this is a content</b><img src=http://adress.com/as5.jpg><br> this is a content <img src=http://www.another-adress.com/dealer.jpg>';
$inf = explode("/dealer.jpg", $content);
$string = str_replace("<img src=\"$inf[0]/dealer.jpg\">", "", $content);
?>

我使用这个是因为我不知道图片链接,链接总是另一个,但我知道这个链接以 Dealer.jpg 结尾,并且这个脚本不起作用......所以有人可以帮助我如何正确地做到这一点?通常我想从我抓取的页面中删除广告。谢谢!

【问题讨论】:

    标签: web-scraping str-replace explode


    【解决方案1】:

    如果我理解正确,您正在尝试删除以“dealer.jpg”结尾的img 标签(无论域),对吗?试试这个:

    $content = '<b>this is a content</b><img src=http://adress.com/as5.jpg><br> this is a content <img src=http://www.another-adress.com/dealer.jpg>';
    $content = preg_replace('/<img src=[A-z0-9-_":\.\/]+\/dealer\.jpg>/', '', $content);
    var_dump($content);
    

    编辑

    第二个示例将匹配img 标记,即使它具有其他属性,例如altwidth 等(但同样,必须以“dealer.jpg”结尾)

    $content = '<b>this is a content</b><img src="http://adress.com/as5.jpg"><br> this is a content <img alt="dealer-image" width="120" height="40" src="http://www.another-adress.com/dealer.jpg">';
    $content = preg_replace('/<img[A-z0-9-_:="\.\/ ]+src="[A-z0-9-_:\.\/]+\/dealer\.jpg">/', '', $content);
    var_dump($content);
    

    Obs:我更改了最初的 $content,因为我注意到它缺少 src 属性的双引号。不确定是错字还是你的字符串真的像这样。

    编辑 2

    这是一个使用 DOM 的示例(猜测是这里最好的方法,因为属性的顺序可能会改变):

    $content = '<b>this is a content</b><img src="http://adress.com/as5.jpg"><br> this is a content <img alt="dealer-image" width="120" height="40" src="http://www.another-adress.com/dealer.jpg">';
    
    // creates a DOMDocument based on your string, and wraps it in a div
    $dom = new DOMDocument();
    $dom->loadHTML("<div>{$content}</div>", LIBXML_HTML_NODEFDTD | LIBXML_HTML_NOIMPLIED);
    
    // get all img tags
    $imgs = $dom->getElementsByTagName('img');
    foreach ($imgs as $img) { // if they have that src, remove it from $dom
        if (strpos($img->getAttribute('src'), 'dealer.jpg')) {
            $img->parentNode->removeChild($img);
        };
    }
    
    // get all the content of my first div, and print it
    $newContent = $dom->getElementsByTagName('div')->item(0);
    foreach ($newContent->childNodes as $childNode) {
        var_dump($dom->saveHTML($childNode));
    }
    

    【讨论】:

    • 忘了问如何在这个 preg 替换脚本中添加:alt="dealer-image" width="120" height="40" />??
    • 谢谢,但问题是我的 img src 字符串是:img src="another-adress.com/dealer.jpg" alt="dealer-image" width="120" height="40" 我试着编辑你的脚本,但不工作.... preg_replace('/:\.\/]+\/dealer\.jpg"+[A-z0-9- i>:="\.\/ ]>/', '', $content);
    • 我开始认为这里最好的方法是使用 DOM 而不是正则表达式。用一个例子更新了答案。代码看起来更大,但我猜它更精确。
    • 不错!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2010-11-09
    • 2010-10-04
    • 2011-11-08
    • 2019-03-27
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    相关资源
    最近更新 更多