dtnmnw3697 2016-01-26 06:28
浏览 72
已采纳

Php:当使用正则表达式在html中存在多个img标记时,如何用不同的不同内容替换src

I get html content from ckeditor and i have following html content

<p><strong>Hello</strong></p>
<p><img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABVYAAAMACAIAA" style="height:131px; width:234px" /></p>
<p><strong>How are you</strong></p>
<p><img alt="" src="data:image/png;base64,ABAXKuVAAAAA3NCSVQICAjb4U/gAAAgAElEQV" style="height:142px; width:253px" /></p>
<p><strong>Good Morning</strong></p>
<p>&nbsp;</p>

Now i want to replace src of each image tag with different image name. Let says for example

<p><strong>Hello</strong></p>
<p><img alt="" src="img.jpg" style="height:131px; width:234px" /></p>
<p><strong>How are you</strong></p>
<p><img alt="" src="test.jpg" style="height:142px; width:253px" /></p>
<p><strong>Good Morning</strong></p>
<p>&nbsp;</p>

source of image is dynamically bind. so it can be anything.after this replacement i save this html content to database.

i have done with

$image_name ='<p><strong>Hello</strong></p>
    <p><img alt="" src="img.jpg" style="height:131px; width:234px" /></p>
    <p><strong>How are you</strong></p>
    <p><img alt="" src="test.jpg" style="height:142px; width:253px" /></p>
    <p><strong>Good Morning</strong></p>
    <p>&nbsp;</p>';
    $html = preg_replace('!(?<=src\=\").+(?=\"(\s|\/\>))!', 'img.jpg',$image_name );

But this replace all src same.

I want whole content same except src of <img> tag. I need to replace this content using regex. I prefer regex because i want to save this replaced html into database. If any other solution works then that is also good.

  • 写回答

1条回答 默认 最新

  • dortmundbvb0624 2016-01-26 07:26
    关注

    I have done using DOM parser as suggestion given in comments. Following is my so

    $image_name = '<p><strong>Hello</strong></p>
    <p><img alt="" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABVYAAAMACAIAA" style="height:131px; width:234px" /></p>
    <p><strong>How are you</strong></p>
    <p><img alt="" src="data:image/png;base64,ABAXKuVAAAAA3NCSVQICAjb4U/gAAAgAElEQV" style="height:142px; width:253px" /></p>
    <p><strong>Good Morning</strong></p>
    <p>&nbsp;</p>';
    
    $doc = new DOMDocument();
    $doc->loadHTML($image_name);
    $img_tags = $doc->getElementsByTagName('img');
    
    $i=0;
    foreach ($img_tags as $t )
    {
        $savepath = 'img_'.$i.'jpg';
        $t->setAttribute('src',$savepath);
        $i++;
    }
    $cont = $doc->saveHTML();
    

    This gives me proper result.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答