簡體   English   中英

如何僅刪除帶有正則表達式的嵌入式圖像?

[英]How can I remove only inline images with a regular expression?

我有很多用戶生成的內容,其中包含以下格式的內嵌圖像:

<img src="data:image/gif;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0jvb2
/ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAARe8L1hwLJoExKcpp
V0aCcGCmTIHEIUEqjgaORCMxIC6e0CcguWw6aFjsVMkkIr7g77ZKPJjd7sJAgVGoEgAwXEQA7" 
width="16" height="14" alt="embedded folder icon">

有些圖像是gif,有些圖像是png,但也有可能是其他圖像類型。

我希望能夠使用PHP刪除此類內聯圖像。 我猜這樣做的方法將是一個正則表達式,即使過度使用正則表達式似乎在Stack Overflow社區中不受歡迎,因為它經常被用來代替其他工具更好地工作並且是針對特定的目的。

但是,對於這種情況,我可以想到除了strip_tags之外沒有其他工具可以完成這項工作,但我確實希望保留不是內聯編碼的圖像。

因此,如何使用正則表達式通過PHP過濾掉內聯圖像? 或者,如果有更好的工具來執行此操作,那是什么?

正則表達對我來說聽起來不錯。 只要它匹配data:image/gif和其他類型的圖像,當且僅當它們出現在img標記內時才要刪除。

這是一個起點,將其擴展為您喜歡的:

<img[^>]* src=['"]?data:image/gif[^>]*>

確保使用ignore case標志運行它並在你將其置於現場之前測試它的地獄。

一般而言,正則數據並不令人沮喪。 它們是PHP工具箱中的任何其他工具。 一旦使用正則表達式解析HTML,問題就會開始出現。 對於小的“已知格式”摘要,您可以擺脫。 但作為一般的HTML操作工具,正則表達式根本無法保證您將獲得良好的結果,因為HTML不是常規語言。

與大多數HTML操作一樣,請使用DOM:

$dom = new DOMDocument;
$dom->loadHTML(...);
$xp = new DOMXPath($dom);

$images = $xp->query("//img[starts-with(@src,'data:image']");

foreach($images as $img) {
    $img->parentNode->removeChild($img);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM