提问人:Jeff 提问时间:11/14/2009 更新时间:11/14/2009 访问量:4552
如何使用 PHP 的 DOM 扩展 loadHTML
How to use PHP's DOM extension loadHTML
问:
有人建议我,为了关闭一些“悬空”的 HTML 标签,我应该使用 PHP 的 DOM 扩展和 loadHTML。
我已经尝试了一段时间,搜索教程,阅读此页面,尝试各种事情,但似乎无法弄清楚如何使用它来实现我想要的东西。
我有这个字符串:<div><p>The quick brown <a href="">fox jumps...
我需要编写一个函数来关闭打开的HTML标签。
只是在这里寻找一个起点。我通常可以很快弄清楚事情。
答:
2赞
Mike Crowe
11/14/2009
#1
好吧,http://htmlpurifier.org/ 呢? 还 http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/index.php
你能用Tidy吗?http://php.net/manual/en/book.tidy.php
2赞
tplaner
11/14/2009
#2
虽然我相信你可以让 DOM 做你想做的事,但我很确定你使用 Tidy 会更好。
评论
0赞
Jeff
11/14/2009
希望我可以,不能在我的服务器上安装 Tidy。
1赞
tplaner
11/14/2009
虽然不那么全面,但有一些功能会检查并关闭任何打开的标签,两个例子是 snipplr.com/view/3618/close-tags-in-a-htmlsnippet 和 codesnippets.joyent.com/posts/show/959。
1赞
tplaner
11/14/2009
我相当确定 www.phpclasses.org 上有一些类也会关闭打开的标签,您也可以查看为 XML 构建的类,因为它们基本上以相同的方式工作。
0赞
Franz
11/14/2009
#3
我认为你遵循了错误的方法:你必须使用 DOM 的东西来截断字符串,而不是在截断它之后。
我是这样做的:
- 找到要截断字符串的位置
- 删除该点之后的所有子节点
- 截断字符串
3赞
Mark Tomlin
11/14/2009
#4
可以在 PHP 中使用 DOMDocument::loadHTML() 和 DOMDocument::normalizeDocument() 方法使用 DOMDocument 类来完成。
<?php
$html = '<div><p>The quick brown <a href="">fox jumps';
$DDoc = new DOMDocument();
$DDoc->loadHTML($html);
$DDoc->normalizeDocument();
echo $DDoc->saveHTML();
?>
输出:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><div><p>The quick brown <a href="">fox jumps</a></p></div></body></html>
从那里开始,只需 substr & strpos 掉你不想要的 html,就像这样:
<?php
$html = '<div><p>The quick brown <a href="">fox jumps';
$DDoc = new DOMDocument();
$DDoc->loadHTML($html);
$DDoc->normalizeDocument();
$html = $DDoc->saveHTML();
# Remove Everything Before & Including The Opening HTML & Body Tags.
$html = substr($html, strpos($html, '<html><body>') + 12);
# Remove Everything After & Including The Closing HTML & Body Tags.
$html = substr($html, 0, -14);
echo $html;
?>
评论
0赞
Jeff
11/14/2009
整洁对我来说不是一个选择,但希望有人会发现这些信息有用。一会儿要尝试 DOM 部分。谢谢!
0赞
Jeff
11/14/2009
我们如何为 XHTML 做到这一点?
0赞
Mark Tomlin
11/15/2009
我认为您需要做的就是将 DocType 更改为任何 xhtml dtd。运气好的话。
评论