How to prevent the PHP DOMDocument from quot;fixingquot; your HTML string(如何防止PHP DOMDocument修复您的HTML字符串)
问题描述
我一直在尝试使用HTMLDOMObject来解析网页,以便应用程序扫描它们的SEO质量。
然而,我遇到了一点问题。出于测试目的,我编写了一个小的HTML页面,其中包含以下不正确的HTML:
<head>
<meta name="description" content="randomdesciption">
</head>
<title>sometitle</title>
如您所见,标题位于head标记之外,这是我尝试检测的错误。
现在问题来了,当我使用cURL从该页面捕获响应字符串,然后将其发送到DOM文档以将其加载为HTML时,它实际上通过在标题周围添加另一个<head>
和</head>
标记来解决这个问题。
<head>
<meta name="description" content="randomdesciption">
</head>
<head><title>sometitle</title></head>
我检查了cURL响应数据,实际上这不是问题所在,在执行loadHTML()方法的过程中,PHP DOMDocument以某种方式修复了html语法。
我还尝试通过将DOMDocument Recover、subsubteEntities和valiateOnParse属性设置为False来关闭它们,但没有成功。
我一直在谷歌上搜索,但到目前为止我找不到任何答案。我想对于某些人来说,真正希望损坏的HTML不被修复的情况有点少见。
有人知道如何防止DOMDocument修复我损坏的HTML吗?
推荐答案
更新:从PHP5.4开始,您可以使用HTML_PARSE_NO_IMPLIED
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED);
以下是原始答案
你不能。理论上there is a flag HTML_PARSE_NO_IMPLIED
for that in libxml阻止添加隐式标记,但无法从PHP访问。
LIBXML_VERSION
。
运行此代码段:
<?php
$html = <<< HTML
<head>
<meta name="description" content="randomdesciption">
</head>
<title>sometitle</title>
HTML;
$dom = new DOMDocument;
$dom->loadHTML($html);
$dom->formatOutput = true;
echo $dom->saveHTML(), LIBXML_VERSION;
在我的计算机上将提供
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head><meta name="description" content="randomdesciption"></head>
<title>sometitle</title>
</html>
20707
这篇关于如何防止PHP DOMDocument修复您的HTML字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何防止PHP DOMDocument修复您的HTML字符串
基础教程推荐
- 超薄框架REST服务两次获得输出 2022-01-01
- 在 Woocommerce 中根据运输方式和付款方式添加费用 2021-01-01
- 在 PHP 中强制下载文件 - 在 Joomla 框架内 2022-01-01
- 如何在 PHP 中的请求之间持久化对象 2022-01-01
- 通过 PHP SoapClient 请求发送原始 XML 2021-01-01
- Libpuzzle 索引数百万张图片? 2022-01-01
- 在多维数组中查找最大值 2021-01-01
- WooCommerce 中选定产品类别的自定义产品价格后缀 2021-01-01
- XAMPP 服务器不加载 CSS 文件 2022-01-01
- mysqli_insert_id 是否有可能在高流量应用程序中返回 2021-01-01