![](/img/trans.png)
[英]How can I grab the only part of a string that matches a regular expression?
[英]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.