我使用的是PHP,我想从此代码中删除<p>
代码:
<p><img alt="" src="/sites/default/files/art/w2.jpg" style="height:395px; width:800px" /></p>
然后我要重写img
标签,如下所示:
<figure><img src="/sites/default/files/art/w2.jpg" /></figure>
我试图使用DOMDocument来实现这一目标。
这是我的代码:
$document = new DOMDocument;
$document->loadHTML($body);
$embeds= $document->getElementsByTagName('img');
foreach ($embeds as $embed) {
$src= $embed->getAttribute('src');
$link= $document->createElement('figure');
$link= $document->createElement('img');
$link->setAttribute('src', $src);
$embed->parentNode->replaceChild($link, $embed);
}
到目前为止,我还没能做到这一点。
答案 0 :(得分:0)
我尝试了以下内容,它似乎产生了预期的结果。我发现当删除/修改时,通过一组dom节点向后迭代经常在其他方法失败时起作用。
$body='
<html>
<head>
<title>DOM</title>
</head>
<body>
<p>
<img alt="" src="/sites/default/files/art/w2.jpg" style="height:395px; width:800px" />
</p>
<p>
<img alt="" src="/sites/default/files/art/w3.jpg" style="height:395px; width:800px" />
</p>
<p>
<img alt="" src="/sites/default/files/art/w4.jpg" style="height:395px; width:800px" />
</p>
</body>
</html>';
$dom = new DOMDocument;
$dom->loadHTML( $body );
$col = $dom->getElementsByTagName('img');
if( !empty( $col ) ){
for ( $i = $col->length; --$i >= 0; ) {
$node = $col->item( $i );
if( $node ){
$src = $node->getAttribute('src');
if( $src ){
$img = $dom->createElement('img');
$attrib = $dom->createAttribute( 'src' );
$attrib->nodeValue=$src;
$img->appendChild( $attrib );
$fig = $dom->createElement('figure');
$fig->appendChild( $img );
$node->parentNode->parentNode->replaceChild( $fig, $node->parentNode );
}
}
}
}
echo '<textarea cols=100 rows=10>',$dom->saveHTML(),'<textarea>';
答案 1 :(得分:0)
Laravel 5.7版本中的文本
$change=$request->row;
$change['text']='';
$id=DB::table($request->name)->insertGetId($change);
$dom = new DOMDocument('1.0');
$dom->loadHTML($request->row['text']);
$i=0;
foreach ($dom->getElementsByTagName('img') as $img) {
$src= $img->getAttribute('src');
$image_cont = explode(",", $src);
$path='tables/'.$request->name.'/'.$id.'/'.$i.'.png';
Storage::disk('MyDiskDriver')->put($path, base64_decode($image_cont[1]));
$i=$i+1;
}
$new=$dom->saveHTML();
$text=preg_replace('~<(?:!DOCTYPE|/?(?:html|head|body))[^>]*>\s*~i', '', $new);
DB::table($request->name)->where('id', '=', $id)->update(['text' => $test]);
答案 2 :(得分:0)
这会将
标记替换为
$content = '<p><img alt="" src="/sites/default/files/art/w2.jpg" style="height:395px; width:800px" /></p>';
if (preg_match_all('/<img[^>]+src=["\']([^=]*)["\'][^>]*>/i', $content, $images))
{
$images_tags = $images[0];
$images_srcs = $images[1];
foreach ($images_tags[1] as $image_tag)
{
$content = str_replace('<p>' . $image_tag . '</p>','<figure>'.$image_tag.'"></figure>',$content);
}
}
echo $content;
此代码会将
标记替换为
$content = '<p><img alt="" src="/sites/default/files/art/w2.jpg" style="height:395px; width:800px" /></p>';
if (preg_match_all('/<img[^>]+src=["\']([^=]*)["\'][^>]*>/i', $content, $images))
{
$images_tags = $images[0];
$images_srcs = $images[1];
$i = 0;
foreach ($images_tags[1] as $image_tag)
{
$content = str_replace('<p>' . $image_tag . '</p>','<figure><img src="'.$images_srcs[$i].'"></figure>',$content);
$i++;
}
}
echo $content;