我正在使用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);
}
到目前为止,我还不能做到这一点。
我尝试了以下操作,似乎产生了所需的结果。我发现,当其他方法失败时,在删除/修改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>';
这将取代<带有><数字>标签并保留所有标签属性:数字>带有>
$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;
此代码将替换<>带有<数字>标记并删除所有标签属性,但src数字>
$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;
ПримердляLaravel 5.7ссохранениемкартинкипо美元路径изаменынанеговполе文本(содержаниестатьискартинкамиbase64)запроса
示例5.7使用Laravel将图像保存在$path中,并将其替换为文本字段(文章的内容与base64编码的图像)查询$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]);