我有一个表,用DOMDocument
解析其单元格,需要替换单元格内的一些文本,将其内容保持为HTML
这是一个简单的例子:
<?php
$html = '<table><tr><td>First <a href="#!">cell</a></td><td>Second cell</td></tr></table>';
$dom = new DOMDocument;
$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8');
libxml_use_internal_errors(true);
$dom->loadHTML($html);
libxml_use_internal_errors(false);
foreach($dom->getElementsByTagName('td') as $td) {
if(strpos($td->nodeValue,'First') !== false) {
$thisTdHTML = $dom->saveXML($td);
$td->nodeValue = '';
$thisTdHTML = str_replace('First','First table',$thisTdHTML);
$textNode = $dom->createTextNode($thisTdHTML);
$td->appendChild($textNode);
}
}
echo $dom->saveXML($dom);
?>
使用代码HTML标记包含单元格的外部标记的第一个单元格在浏览器上显示
我该如何解决问题?
答案 0 :(得分:0)
好的,根据 @u_mulder 评论,我发现了这个解决方案
<?php
$html = '<table><tr><td>First <a href="#!">cell</a></td><td>Second cell</td></tr></table>';
$dom = new DOMDocument;
$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8');
libxml_use_internal_errors(true);
$dom->loadHTML($html);
libxml_use_internal_errors(false);
foreach($dom->getElementsByTagName('td') as $td) {
if(strpos($td->nodeValue,'First') !== false) {
foreach($td->childNodes as $child) {
if(strpos($child->nodeValue,'First') !== false) {
$child->nodeValue = str_replace('First','First table',$child->nodeValue);
}
}
}
}
echo $dom->saveXML($dom);
?>
但是,孩子可能包含另一个孩子。例如,单元格内可能有一个段落,它可能包含链接等等。
是否有包含任何嵌套级别的解决方案?