这篇文章给大家介绍的内容是关于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);
这个函数真的挺强大的,让我们可以在正则匹配中加入自己的逻辑,很赞。
相关文章推荐:
The above is the detailed content of How to replace img tag in html code based on different conditions in php. For more information, please follow other related articles on the PHP Chinese website!