PHP的DOM创建元素,但自我关闭 [英] php dom create element but self-closing
问题描述
我想创建一个html块,如下所示:
I want to create a html block, like this:
<media>
<media-reference source='15.jpg' />
<media-caption>caption</media-caption>
<hasSyndicationRights>1</hasSyndicationRights>
<licenseId>1</licenseId>
<licensorName>name</licensorName>
</media>
但是在我的代码中< media-reference>
像这样< / media-reference>
关闭。
But in my code <media-reference>
closes like this </media-reference>
.
我如何只关闭该标签?
这是我的代码:
$valFieldBody = '<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Odio labore aut hic soluta! Animi quaerat unde commodi minus dicta, a quidem. Soluta quaerat delectus, id, dolor ex placeat molestiae quae.</p><p><img height="500" src="15.jpg" width="500"/></p>';
$htmlEncoded = mb_convert_encoding($valFieldBody, 'HTML-ENTITIES', 'UTF-8');
$doc = new DOMDocument;
$opcionesLibXML = LIBXML_COMPACT | LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD;
libxml_use_internal_errors(true);
@$doc->loadHTML($htmlEncoded, $opcionesLibXML);
libxml_use_internal_errors(false);
$img_tag = $doc->getElementsByTagName('img');
foreach ($img_tag as $key => $img_items){
$img_src = $img_items->getAttribute('src');
$tag_media = $doc->createElement('media');
$tag_media_reference = $doc->createElement('media-reference');
$tag_media_reference->setAttribute('mime-type','image/jpg');
$tag_media_reference->setAttribute('source',$img_src);
$tag_media_caption = $doc->createElement('media-caption',$img_title);
$tag_hasSyndicationRights = $doc->createElement('hasSyndicationRights','1');
$tag_licenseId = $doc->createElement('licenseId','1');
$tag_licensorName = $doc->createElement('licensorName',$img_title);
$tag_media->appendChild($tag_media_reference);
$tag_media->appendChild($tag_media_caption);
$tag_media->appendChild($tag_hasSyndicationRights);
$tag_media->appendChild($tag_licenseId);
$tag_media->appendChild($tag_licensorName);
$img_items->parentNode->replaceChild($tag_media, $img_items);
}
$valFieldBody = $doc->saveHTML($doc->documentElement);
现在我正在使用 str_replace
来更改以下内容:
For now I'm using str_replace
to change that:
$valFieldBody = str_replace("></media-reference>"," />", $valFieldBody);
推荐答案
问题是 saveHTML ()
使用自己的规则创建输出(据我所知),并且并不总是根据XHTML标准编写内容。相反,如果您使用 saveXML()
将其写出,则应该获得更标准的输出
The problem is that saveHTML()
is creating the output using it's own rules (as far as I can tell) and doesn't always write things according to XHTML standards. If instead you write it out using saveXML()
you should get a more standard output
$valFieldBody = $doc->saveXML($doc->documentElement);
这给出了...
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Odio labore
aut hic soluta! Animi quaerat unde commodi minus dicta, a quidem.
Soluta quaerat delectus, id, dolor ex placeat molestiae quae.
<p>
<media>
<media-reference mime-type="image/jpg"
source="15.jpg" />
<media-caption>abcd</media-caption>
<hasSyndicationRights>1</hasSyndicationRights>
<licenseId>1</licenseId>
<licensorName>abcd</licensorName>
</media>
</p>
</p>
(请注意,如果原始源不是XHTML,另存为XML可能会引起其他问题)
(Note that saving as XML may actually cause other problems if your original source isn't XHTML)
这篇关于PHP的DOM创建元素,但自我关闭的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!