如何在没有HTML包装的情况下保存DOMDocument的HTML?我是下面的函数,我很难输出DOMDocument而没有附加XML,HTML,体体和p内容输出之前的标签包装。建议的解决办法:$postarray['post_content'] = $d->saveXML($d->getElementsByTagName('p')->item(0));只有当内容中没有块级元素时才能工作。但是,当它这样做时,如下面使用H1元素的示例所示,SaveXML的结果输出被截断为.<p>If you like</p>我被指出这篇文章是一种可能的解决办法,但我不明白如何将它实现到这个解决方案中(请参阅下面的注释)。有什么建议吗?function rseo_decorate_keyword($postarray) {
global $post;
$keyword = "Jasmine Tea"
$content = "If you like <h1>jasmine tea</h1> you will really like it with Jasmine Tea flavors.
This is the last ocurrence of the phrase jasmine tea within the content. If there are other instances of the
keyword jasmine tea within the text what happens to jasmine tea."
$d = new DOMDocument();
@$d->loadHTML($content);
$x = new DOMXpath($d);
$count = $x->evaluate("count(//text()[contains(translate(., 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'),
'$keyword') and (ancestor::b or ancestor::strong)])");
if ($count > 0) return $postarray;
$nodes = $x->query("//text()[contains(translate(., 'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'), '$keyword')
and not(ancestor::h1) and not(ancestor::h2) and not(ancestor::h3) and not(ancestor::h4) and not(ancestor::h5) and not(ancestor::h6)
and not(ancestor::b) and not(ancestor::strong)]");
if ($nodes && $nodes->length) {
$node = $nodes->item(0);
// Split just before the keyword
$keynode = $node->splitText(strpos($node->textContent, $keyword));
// Split after the keyword
$node->nextSibling->splitText(strlen($keyword));
// Replace keyword with <b>keyword</b>
$replacement = $d->createElement('strong', $keynode->textContent);
$keynode->parentNode->replaceChild($replacement, $keynode);
3 回答
![?](http://img1.sycdn.imooc.com/533e51f30001edf702000200-100-100.jpg)
aluckdog
TA贡献1847条经验 获得超7个赞
loadHTML
$option
$html->loadHTML($content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
saveHTML()
doctype
<html>
<body>
.
LIBXML_HTML_NOIMPLIED
关闭隐含html/body元素的自动添加 LIBXML_HTML_NODEFDTD
防止在找不到默认的doctype时添加。
loadHTML
LIBXML_HTML_NODEFDTD
LIBXML_HTML_NOIMPLIED
![?](http://img1.sycdn.imooc.com/545864000001644402200220-100-100.jpg)
慕容708150
TA贡献1831条经验 获得超4个赞
# remove <!DOCTYPE $doc->removeChild($doc->doctype); # remove <html><body></body></html> $doc->replaceChild($doc->firstChild->firstChild->firstChild, $doc->firstChild);
- 3 回答
- 0 关注
- 292 浏览
添加回答
举报
0/150
提交
取消