如何阻止 PHP DOMDocument::saveHTMLFile 生成十六进制代码

如何阻止 PHP DOMDocument::saveHTMLFile 生成十六进制代码,并对其进行转换


<a href="word word\word.html"></a>

进入这个


<a href="word%20word%5Cword.html"></a>

它还添加了一个元标记,并在我的 id 和其他不需要它的属性上附加引号...,但这是实际的问题,因为它破坏了停止工作的链接


我正在加载一个 html 文件,添加另一个文件的标头,然后保存它。我已将问题范围缩小到 DOMDocument::saveHTMLFile 本身


编辑 1:在我的本地站点上,我收到“在此服务器上找不到请求的 URL”,尽管它在地址栏中显示为 mysite\word word\word.html。如果我转到地址栏,点击输入,它会再次起作用。如果我复制粘贴 word%20word%5Cword.html,它会在地址栏中转换为单词 word\word.html,但会抛出“在此服务器上找不到请求的 URL”。如果我在地址栏中再次点击输入,那么它就会起作用。显然 word%20word%5Cword.html 不起作用...并且智能浏览器是 FF。UC 留下了十六进制代码,所以它永远无法工作,Chrome 也是......


编辑2:更奇怪的是,问题不是%20,而只是%5c...确实如此,它是浏览器\修复的“”而不是“/”...实际上我想我无法将问题缩小到saveHTMLFile,因为当我在浏览器中测试时,十六进制代码似乎会变回相应的字符,只是它破坏了功能。假设一个解决方法是将所有“ \”更改为“/”,但我真的不希望 saveHTMLFile 更改任何内容,因为它也会进入我的人类可读的 html 注释,并通过用 html 实体替换内容而造成混乱,从 html 格式的角度来看,这毫无意义。当然,最终的解决方法是回到纯文件和字符串操作,但为了到目前为止的努力,我想停止 saveHTMLFile 转换我的 html


编辑3:在文件比较手动检查中,我意识到这要糟糕得多...多个\"完全消失,而其他则没有,以及,我的 <meta name="description" 标签。我无法想象它与那些有什么关系。/它还从我的相对路径中删除了尾随。这是不可接受的,这种实施让我想祈祷种族灭绝的外星人找到我们=]。如果我不能阻止它弄乱我的文件,它就会回到普通的旧式安全文件操作。这是 PHP 5.3.1。我会尝试一个稍微新一点的


编辑4:PHP 5.4.7中的相同问题


莫回无
浏览 79回答 1
1回答

呼啦一阵风

在 Java 中遇到了一个名为 Jsoup 的库,它取消了我的一些文本的大写并删除了不应该的结束标签。我至少可以尝试另外两个 Java DOM 实现,但我想我必须完全远离 DOM 实现,我开始在这里看到一种模式 =]。当程序员无法实现符合规范的基本文本解析时,就会出现根本性错误 - 说到这一点,Jsoup 不会生成十六进制代码......只是说简单的解决方案是文件操作(Java) - 完全避免这个问题并保持简单愚蠢:File htmlTemplateFile = new File(testfilepath);htmlString = FileUtils.readFileToString(htmlTemplateFile);header = FileUtils.readFileToString(new File(headerfilepath));Pattern pattern = Pattern.compile("<body(.*)>");Matcher matcher = pattern.matcher(htmlString);String match = null;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (matcher.find())&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; match = matcher.group();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println("no body in file: " + htmlFile);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; continue;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }htmlString = htmlString.replaceFirst(pattern.toString(), match + header);FileUtils.writeStringToFile(htmlTemplateFile, htmlString);
打开App,查看更多内容
随时随地看视频慕课网APP