【发布时间】:2012-02-13 19:50:20
【问题描述】:
我希望解析一些从 ckeditor 提交的 HTML。发布的 HTML 如下所示:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">#012<html><body><p>Text Before <img alt="HAMBURGER" height="20" src="/sites/all/modules/ckeditor/plugins/apoji/images/emoji-E120.png" title="HAMBURGER" width="20"> Text After</p></body></html>
(格式化,不声明一致性):
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<body>
<p>
Text Before
<img alt="HAMBURGER" height="20" src="/sites/all/modules/ckeditor/plugins/apoji/images/emoji-E120.png" title="HAMBURGER" width="20">
Text After
</p>
</body>
</html>
我一直在寻找类似下面的东西:
$DOM = new DOMDocument;
$DOM->loadHTML($input);
$items = $DOM->getElementsByTagName('*');
foreach ($items as $item) {
switch ($item->nodeName) {
case "p":
$sms .= $item->nodeValue."\n";
break;
case "img":
$img_out .= "IMG Attr: ".$item->getAttribute('title')."\n";
break;
}
}
我的目标是创建一个纯文本字符串,根据其标题替换图像,所以我有一个类似的字符串:
Text Before HAMBURGER Text After
我已经开始走 DOM 路线,因为这似乎是最好的方法,但现在我有两个问题:
- 如果我像上面那样遍历文档,IMG 会在文本之后结束, 不在中间。我怎样才能避免这种情况?
- 从 DOM 文档中提取所有纯文本的最佳方法,保持项目的顺序(链接到第 1 点)。
在此先感谢任何可以给我一些意见的人。
【问题讨论】:
-
你会使用 JavaScript 吗? jQuery 很容易处理这个问题,然后你可以通过 AJAX 提交它。
-
所以你真正的问题是“如何用它的标题属性替换一个 IMG 元素”,对吧?
-
你的标记总是那么简单还是有更复杂的情况?