亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Preg_replace 不會刪除每個帶有 src 地址的 img 標簽

Preg_replace 不會刪除每個帶有 src 地址的 img 標簽

PHP
MMMHUHU 2022-12-30 16:13:43
我正在使用我的 PHP 來搜索來自特定地址的圖像,因此我想刪除所有這些 img 標簽。我有這樣顯示的 img 標簽:<img src="http://example.com/someimage1.jpeg"><img src="http://example.com/someimage2.jpeg"><img src="http://example.com/someimage3.jpeg"><img src="http://example.com/someimage4.jpeg"><img style="OVERFLOW: hidden; WIDTH: 0px; MAX-HEIGHT: 0px" alt="" src="http://test.mydomain.com/project433q325/track/Images/signature.gif?id=446&amp;etc=1586624376">當我嘗試這個時:foreach ($src as $image) {    $image = preg_replace("\<img src\=\"(.+)\"(.+)\/\>/i", '', $src);}它不會刪除 img 標簽,所以我也試過這個:foreach ($src as $image) {    $image = preg_replace("/<img[^>]+\>/i", "", $src); }我仍然有同樣的問題,因為它不會刪除 img 標簽。這是完整的代碼:if (strpos($inbox_message, 'http://test.mydomain.com/project433q325/track/Images/signature.gif?') !== false) {    $doc = new DOMDocument();    $doc->loadHTML($inbox_message);    $xpath = new DOMXpath($doc);    $src = $xpath->evaluate("string(//img/@src)");    if ($src) {        foreach ($src as $image) {            //image->nodeValue = preg_replace('<img.*?src='.$src.'.*?/>!i', '', $src);            //$src = preg_replace("/<img[^>]+\>/i", "", $src);            $image = preg_replace("\<img src\=\"(.+)\"(.+)\/\>/i", '', $src);        //}    }    $inbox_message = $doc->saveHTML();} 我想做的是我只想搜索具有顯示“ http://test.mydomain.com/project433q325/track/Images/signature.gif?”的 src 地址的 img 標簽。并刪除它們。您能否舉例說明如何搜索具有特定 src 地址的每個 img 標簽,以便我可以使用 preg_replace 刪除每個 img 標簽?謝謝你。
查看完整描述

2 回答

?
冉冉說

TA貢獻1877條經驗 獲得超1個贊

你不應該為此使用正則表達式。您可以strpos像以前一樣使用您的,但將其移動到 DOM 解析中并比較每個img. 然后您可以使用removeChild()刪除相應的圖像。(這是來自如何使用 DOMDocument 刪除元素的改編答案?)


<?php

$inbox_message = '<p> Keep This</p><img src="http://example.com/someimage1.jpeg"><img src="http://example.com/someimage2.jpeg"><img src="http://example.com/someimage3.jpeg"><img src="http://example.com/someimage4.jpeg"><h1>Fake element</h1><img style="OVERFLOW: hidden; WIDTH: 0px; MAX-HEIGHT: 0px" alt="" src="http://test.mydomain.com/project433q325/track/Images/signature.gif?id=446&amp;etc=1586624376">';

$doc = new DOMDocument();

$doc->loadHTML($inbox_message);

$imgs = $doc->getElementsByTagName('img');

for($i = $imgs->length; --$i >= 0;){

    $node = $imgs->item($i);

    if (strpos($node->getAttribute('src'), 'http://test.mydomain.com/project433q325/track/Images/signature.gif?') !== false) {

        $node->parentNode->removeChild($node);

    }

}

echo $doc->savehtml();

https://3v4l.org/qinLR


您也可以使用strtolowerif $node->getAttribute('src')might contain varying case。在這種情況下,針strpos也應該小寫。


對于正則表達式問題...


preg_replace("\<img src\=\"(.+)\"(.+)\/\>/i", '', $src);

正則表達式的開頭試圖使用不是有效定界符的反斜杠。A delimiter can be any non-alphanumeric, non-backslash, non-whitespace character.起始定界符必須與結束定界符匹配。此外,您$src只包含屬性的值,因此<img src...永遠不會匹配。


如果您要實現該功能,則.+需要將其替換為您要檢查的 URI。


但是正則表達式在這里確實是錯誤的方法。像以前一樣,為這些類型的工作使用解析器。正則表達式不應用于結構化數據。如果它是結構化的,則可能已經為它編寫了函數。


查看完整回答
反對 回復 2022-12-30
?
LEATH

TA貢獻1936條經驗 獲得超7個贊

要刪除所有img標簽,請使用以下正則表達式模式:

<img\s+[^>]+>

https://regex101.com/r/HfStzZ/1


要包含您在問題中描述的特定src網址,請使用以下正則表達式模式:

<img\s+[^>]*\bsrc="[^"]*\/signature\.gif[^\>]*\>

https://regex101.com/r/HfStzZ/2


在 PHP 中,使用preg_replace如下命令:

$output = preg_replace('/<img\s+[^>]*\bsrc="[^"]*\/signature\.gif[^\>]*\>/', '', $input);



查看完整回答
反對 回復 2022-12-30
  • 2 回答
  • 0 關注
  • 134 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號