【发布时间】:2018-03-26 11:53:59
【问题描述】:
我想创建一个输出文本过滤器,将 DOM 中的所有 <img> 元素替换为以下文本“no images allowed”。
即:如果用户创建此 HTML 标记:
<p><img src="/image.jpg" /></p>
呈现以下 HTML:
<p>no images allowed</p>
请注意,我不能使用preg_replace。问题很简单,我需要解析 DOM 以找到禁止使用的图像。
感谢this answer,我发现getElementsByTagName()返回“live”迭代器,所以你需要两个步骤,所以我有了这个:
foreach ($elements as $element) {
$domArray[] = $element;
$src= $element->getAttribute('src');
$frag= $dom->createElement('p');
$frag->nodeValue = 'no images allowed';
$element->parentNode->appendChild($frag);
}
// loop through the array and delete each node
$nodes = iterator_to_array($dom->getElementsByTagName('img'));
foreach ($nodes as $node) {
$node->parentNode->removeChild($node);
}
$newtext = $dom->saveHTML();
它几乎做我想做的事,但我明白了:
<p><p>no images allowed</p></p>
【问题讨论】:
-
如果用户创建了一个
<p>元素,其中包含<img>和一些文本或其他元素,会发生什么? -
@GUIDO,按预期创建
<p>-element 工作(请参阅更新的问题)。它正在摆脱问题所在的<img>-元素。
标签: php html dom domdocument