PHP createTextNode() 使用 saveHTML() 仅显示文本

Posted

技术标签:

【中文标题】PHP createTextNode() 使用 saveHTML() 仅显示文本【英文标题】:PHP createTextNode() is displaying only text using saveHTML() 【发布时间】:2016-03-16 03:01:30 【问题描述】:

我正在使用以下代码将 html 模板的结构解析为 DOM 选项,然后使用 SQL 查询的结果,我正在尝试生成某些 html 片段并将其附加到 dom 对象的父节点,然后回显使用样式生成的 HTML。但是,呈现的 HTML 是原始 HTML,并没有被设置样式。

有什么想法吗?我正在考虑将这一切都转移到 JQuery 而不是 php,因为在谷歌搜索之后,我找不到一个直接的解决方案,如果不使用 <script> 标签在 HTML 本身中进行一些后处理就可以工作。

以下是应从中附加节点的模板 HTML(jumbotron HTML):

<!-- CONTENT -->
  <div class="container">

    <div class="row">
      <!--CONTENT DIVs-->
      <div class="jumbotron col-xs-12 col-sm-10 col-sm-push-2" id="contents">

        <!--END OF CONTENT DIVs-->

这里是 PHP 代码:

//Create DOM of the main page
$masterdoc = new DOMDocument();
@$masterdoc->loadHTMLFile($filename);

$masterflag = $masterdoc->getElementById("contents");

//The SQL statement needed
$sql = "SELECT folder_name FROM FOLDERS INNER JOIN LINKAGES ON FOLDERS.id = LINKAGES.child WHERE folder_id = (SELECT id from FOLDERS WHERE folder_name = '" . $foldername . "');";
$result = $conn->query($sql);
$count = $result->num_rows;

//Save all the folder names into an array
$data = array();
$index = 0;
if ($count> 0) 
    while($row = $result->fetch_array()) 
        $data[$index] = $row["folder_name"];
        $index++;
    
 else 
    echo "0 results";

//Loop through the array to generate Jumbotrons and append these to the right section of the main HTML.
for ($x = 0; $x <count($data); $x++) 
  $masterflag->appendChild($masterdoc->createTextNode('<div class="row"><div class="col-xs-2"><i class="fa fa-folder fa-4x"></i></div><div class="col-xs-8"><a href="http://localhost/www/folders.php?link="' . $data[$x] . '" class="btn btn-block" type="content" id="content">' . $data[$x] . '</a></div><div class="col-xs-2"><i class="fa fa-arrow-right fa-4x"></i></div></div><hr>'));


echo $masterdoc->saveHTML();

这样你就可以看到发生了什么,这是我的页面:

【问题讨论】:

【参考方案1】:

请参阅this 答案。您需要使用DomDocument::createDocumentFragment(),然后将您的XML字符串附加到创建的片段,然后将DomElement::appendChild()该片段附加到$masterflag

【讨论】:

举个例子也很有用

以上是关于PHP createTextNode() 使用 saveHTML() 仅显示文本的主要内容,如果未能解决你的问题,请参考以下文章

如何使用带有 createTextNode() 的列表的第一个子项

在 Removechildnode 之后删除 CreateTextNode 添加的空白

innerHTML 和 document.createTextNode 有啥区别 [重复]

在 createTextNode() 中使用变量而不是字符串

createTextNode 对 HTML 注入和 XSS 是不是完全安全?

createTextNode() 方法和createTextNode()方法