Maison  >  Article  >  développement back-end  >  Comment remplacer la balise img dans le code HTML en fonction de différentes conditions en php

Comment remplacer la balise img dans le code HTML en fonction de différentes conditions en php

不言
不言original
2018-08-03 14:09:392940parcourir

这篇文章给大家介绍的内容是关于php根据不同的条件替换一段html代码中的不同的img标签,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

一、需求

这次的需求是获取到一段html代码,这段代码里面含有多个img标签。需求就是先获取到这些img标签的src属性,然后进行业务编写。业务编写之后,把新的src内容分别替换到不同的img标签中。

这部分逻辑听起来很简单,但实际操作还是有点难度,下面说一下解题过程。

二、实现过程

1、获取到一段html代码中所有img标签的src属性

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

这里是利用正则匹配,$content是我们要提取的html代码,$match是获取到的数组。大家可以打印一下,$srcArr就是获取到的所有src属性的数组。这里可以通过循环来处理我们的逻辑。

2、当处理完逻辑之后,我们需要再把处理后的src分别赋值给每个img标签

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

这里还是使用正则匹配,但是如果按这种方式匹配的话,我们会把所有的img标签的src属性替换成$base64,这显然不是我们想要的结果。

3、最终方案

//申明正则匹配规则
 $rules = &#39;#<img(.+?)src="([^"]+?)"([^>]*?)>#&#39;; //这里是循环,通过循环来匹配相应的img标签
    for($i=0;$i<$count;$i++) {
    //关键就是这个preg_replace_callback函数,它比着传统的正则替换,多了一个callback函数,可以让我们写自己的逻辑,use()里面是我们需要用到的参数
      $newContent =  preg_replace_callback(&#39;#<img(.+?)src="([^"]+?)"([^>]*?)>#&#39;, 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);

这个函数真的挺强大的,让我们可以在正则匹配中加入自己的逻辑,很赞。

相关文章推荐:

php如何利用32进制实现对id的加密解密(附代码)

php中四种安全过滤函数的总结(附代码)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn