为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
莫回无 2023-07-21 16:30:45
如何阻止 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中的相同问题
查看完整描述

1 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

在 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;

                if (matcher.find())

                    match = matcher.group();

                else {

                    System.out.println("no body in file: " + htmlFile);

                    continue;

                }

htmlString = htmlString.replaceFirst(pattern.toString(), match + header);

FileUtils.writeStringToFile(htmlTemplateFile, htmlString);


查看完整回答
反对 回复 2023-07-21
  • 1 回答
  • 0 关注
  • 77 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信