php如何根據不同的條件替換html代碼中的img標籤

來源:互聯網
上載者:User

這篇文章給大家介紹的內容是關於php根據不同的條件替換一段html代碼中的不同的img標籤,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所協助。

一、需求

這次的需求是擷取到一段html代碼,這段代碼裡面含有多個img標籤。需求就是先擷取到這些img標籤的src屬性,然後進行業務編寫。業務編寫之後,把新的src內容分別替換到不同的img標籤中。

這部分邏輯聽起來很簡單,但實際操作還是有點難度,下面說一下解題過程。

二、實現過程

1、擷取到一段html代碼中所有img標籤的src屬性

 preg_match_all('/<img[^>]*?src="([^"]*?)"[^>]*?>/i',$content,$match);     $srcArr = $match[1];

這裡是利用正則匹配,$content是我們要提取的html代碼,$match是擷取到的數組。大家可以列印一下,$srcArr就是擷取到的所有src屬性的數組。這裡可以通過迴圈來處理我們的邏輯。

2、當處理完邏輯之後,我們需要再把處理後的src分別賦值給每個img標籤

$rules = '#<img(.+?)src="([^"]+?)"([^>]*?)>#'; preg_replace($rules,"<img$1src=\"$base64\"$3>",$content);

這裡還是使用正則匹配,但是如果按這種方式匹配的話,我們會把所有的img標籤的src屬性替換成$base64,這顯然不是我們想要的結果。

3、最終方案

//申明正則匹配規則 $rules = '#<img(.+?)src="([^"]+?)"([^>]*?)>#'; //這裡是迴圈,通過迴圈來匹配相應的img標籤    for($i=0;$i<$count;$i++) {    //關鍵就是這個preg_replace_callback函數,它比著傳統的正則替換,多了一個callback函數,可以讓我們寫自己的邏輯,use()裡面是我們需要用到的參數      $newContent =  preg_replace_callback('#<img(.+?)src="([^"]+?)"([^>]*?)>#', function($m) use($id,$i,$base64){     //var_dump($m[0]);  此處的$m[0]代表匹配到的第一個圖片地址     //這裡的$this->is_replace是我自己的一個函數,屬於判斷條件        if($this->is_replace($m[$i],$id,$i)) {                  //如果符合的話,就替換為$base64[$i]          return "<img src=\"$base64[$i]\">";        }else {                //如果條件不符合,就不替換          return $m[0];        }        }, $content);

這個函數真的挺強大的,讓我們可以在正則匹配中加入自己的邏輯,很贊。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.