gpt4 book ai didi

php - 如何解决 DOMDocument 的缩进问题?

转载 作者:搜寻专家 更新时间:2023-10-31 21:17:25 25 4
gpt4 key购买 nike

我刚开始使用 DOMDocument 对象,因为我想解析上传的 HTML 文件,然后将其用作我的 cms 的模板。

我正在从一个文件中加载 HTML,并且出于测试目的,将它保存为一个新的 html 文件而不做任何更改。问题是:缩进乱七八糟。

这是我的 HTML 文件的样子:

<!DOCTYPE html>
<html>
<head>
<title>DOM Testpage</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta name="language" content="deutsch, de" />
</head>
<body>
<div class="pageOverlay"></div>
<div style="height:100px;"></div>
<div id="LoginForm">
<div id="LoginLogo">
Here's some Text
<br />
And another Text with some German Umlauts: öäü ÖÄÜ ß and so on...
<br />
</div>
<form method="post" action="">
<!-- Here be dragons. And a nice comment -->
<input type="text" name="cms_user" value="" class="InputText " data-defaultvalue="Username" title="Please enter your username." style="margin:0px 0px 20px 0px;" />
<input type="password" name="cms_password" value="" class="InputText " data-defaultvalue="Password" title="Please enter your password." style="margin:0px 0px 20px 0px;" />
<input type="checkbox" name="cms_remember_login" value="1" id="cms_remember_login" />
<label for="cms_remember_login" style="line-height:14px; margin-left:5px;">Remember Login</label>
<!-- Another comment
This one's even
longer -->
<input type="submit" name="submitLogin" value="Login" />
</form>
</div>
</body>
</html>

PHP 部分:

<?php
$lo_dom = new DOMDocument();
$lo_dom->loadHTMLFile("test.html");
$lo_dom->saveHTMLFile("templates/test_neu.html");
?>

当我打开新的 HTML 文件时,源代码如下所示:

<!DOCTYPE html>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>DOM Testpage</title><meta name="language" content="deutsch, de"></head><body>
<div class="pageOverlay"></div>
<div style="height:100px;"></div>
<div id="LoginForm">
<div id="LoginLogo">
Here's some Text
<br>
And another Text with some German Umlauts: &ouml;&auml;&uuml; &Ouml;&Auml;&Uuml; &szlig; and so on...
<br></div>
<form method="post" action="">
<!-- Here be dragons. And a nice comment -->
<input type="text" name="cms_user" value="" class="InputText " data-defaultvalue="Username" title="Please enter your username." style="margin:0px 0px 20px 0px;"><input type="password" name="cms_password" value="" class="InputText " data-defaultvalue="Password" title="Please enter your password." style="margin:0px 0px 20px 0px;"><input type="checkbox" name="cms_remember_login" value="1" id="cms_remember_login"><label for="cms_remember_login" style="line-height:14px; margin-left:5px;">Remember Login</label>
<!-- Another comment
This one's even
longer -->
<input type="submit" name="submitLogin" value="Login"></form>
</div>
</body></html>

我已经尝试设置 preserveWhiteSpaceformatOutput 但这并没有改变任何东西。

这没什么大不了的,但如果输出看起来像输入就太好了。

有什么办法解决这个问题吗?

另一个问题:在我使用 appendChild() 添加另一个节点后,有没有办法手动插入 \n 换行符?

最佳答案

用 DOM 重新格式化文档的正确方法是

$dom = new DOMDocument();
$dom->preserveWhiteSpace = FALSE;
$dom->loadHTMLFile("test.html");
$dom->formatOutput = TRUE;
$dom->saveHTMLFile("templates/test_neu.html");

如果这没有产生所需的输出,您仍然可以自己添加空格。用于格式化目的的任何空白都是 DOMText 节点。查看我的答案

更详细的解释。另一种方法是使用 Tidy重新格式化代码或 https://stackoverflow.com/search?q=html+beautifier+php 中建议的任何工具

关于php - 如何解决 DOMDocument 的缩进问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5723784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com