這篇文章給大家介紹的內容是關於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);
這個函數真的挺強大的,讓我們可以在正則匹配中加入自己的邏輯,很贊。