我从ckeditor获取html内容,我有以下html内容
<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> </p>
现在我想用不同的图像名称替换每个图像标记的src
。比如说
<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> </p>
图像源是动态绑定的。所以它可以是任何东西。在这个替换后我将这个html内容保存到数据库。
我已经完成了
$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> </p>';
$html = preg_replace('!(?<=src\=\").+(?=\"(\s|\/\>))!', 'img.jpg',$image_name );
但这会替换所有src相同。
除了src
标记的<img>
之外,我希望整个内容相同。我需要使用正则表达式替换此内容。我更喜欢正则表达式,因为我想将这个被替换的html保存到数据库中。如果任何其他解决方案有效,那么这也很好。
答案 0 :(得分:4)
我已经使用DOM解析器作为评论中给出的建议。以下是我的
$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> </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();
这给了我正确的结果。