html转换失败怎么解决,DOMDocument :: loadHTML():由于输入错误,输入转换失败

我希望使用PHP和CURL废弃中文网站。早些时候我遇到了压缩结果的问题,SO帮助我解决了问题。

现在,我在通过PHP - DOMDocument解析内容时遇到了麻烦。

错误如下,

Warning: DOMDocument::loadHTML(): input conversion failed due to input error, bytes 0xE3 0x80 0x90 0xE8 in /var/www/html/ ..

即使发出警告,也无法获得进一步的结果。

我的代码如下:

$agent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0';

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL,$url);

curl_setopt($curl, CURLOPT_HTTPHEADER, array('text/html; charset=gb2312'));

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);

curl_setopt($curl, CURLOPT_ENCODING, ""); // handling all compressions

curl_setopt($curl, CURLOPT_USERAGENT, $agent);

curl_setopt($curl, CURLOPT_TIMEOUT, 1000);

$html = curl_exec($curl) or die("error: ".curl_error($curl));

curl_close($curl);

$htmlParsed = mb_convert_encoding($result,'utf-8','gb2312');

$doc = new DOMDocument();

$doc->loadHTML($htmlParsed);

$xpath = new DOMXpath($doc);

$elements = $xpath->query('//div[@class="test"]//a/@href');

if (!is_null($elements)) {

foreach ($elements as $element) {

echo "
[". $element->nodeName. "]";

$nodes = $element->childNodes;

foreach ($nodes as $node) {

echo $node->nodeValue. "\n";

}

}

}

我在目标网站中找到了内容类型,

所以我尝试将结果转换为utf-8。

由于输入转换在' DOMDocument :: loadHTML()'代码行,我无法解析网页以获得结果。

我目前陷入困境,任何帮助或建议都将受到高度赞赏。提前完成。

(之前我曾经使用过简单的HTML DOM解析器,这非常简单。但之后在SO中阅读有关其用法的缺点。我计划切换到PHP的原生DOM解析器)< / em>的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
将 Word 文档转换HTML 有多种方法,其中一种常用的方法是使用 Microsoft Office 自带的 “另存为” 功能。然后,可以使用 JavaScript 将生成的 HTML 文件加载到 Web 页面中进行在线预览。 下面是一个使用 JSZip 和 Docxtemplater 库将 Word 文档转换HTML 的示例代码: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Word to HTML Converter</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.5.0/jszip.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/docxtemplater/3.5.0/docxtemplater.js"></script> </head> <body> <input type="file" id="file-input"> <div id="preview-container"></div> <script> // 获取文件输入元素和预览容器元素 const fileInput = document.getElementById('file-input'); const previewContainer = document.getElementById('preview-container'); // 监听文件选择事件 fileInput.addEventListener('change', event => { // 获取选中的文件 const file = event.target.files[0]; // 创建读取文件的 FileReader 对象 const reader = new FileReader(); // 监听文件读取完成事件 reader.addEventListener('load', async () => { // 将读取的文件内容转换为二进制数组 const buffer = reader.result; // 使用 JSZip 解压缩文件 const zip = await JSZip.loadAsync(buffer); // 获取文档主体内容 const documentXml = await zip.file('word/document.xml').async('string'); // 使用 Docxtemplater 渲染文档 const doc = new Docxtemplater(); doc.loadZip(zip); doc.setData({}); doc.render(); // 将渲染结果转换HTML const renderedHtml = doc.getZip().file('word/document.xml').asText(); const html = await convertToHtml(renderedHtml); // 显示预览结果 previewContainer.innerHTML = html; }); // 读取文件内容 reader.readAsArrayBuffer(file); }); // 将渲染结果转换HTML async function convertToHtml(renderedXml) { // 创建虚拟 DOM const domParser = new DOMParser(); const xmlDoc = domParser.parseFromString(renderedXml, 'application/xml'); const virtualDom = document.createElement('div'); // 遍历文档节点,将节点转换HTML 元素 for (const node of xmlDoc.childNodes) { const element = convertNodeToElement(node); virtualDom.appendChild(element); } // 返回 HTML 字符串 return virtualDom.innerHTML; } // 将文档节点转换HTML 元素 function convertNodeToElement(node) { // 如果是文本节点,则返回文本元素 if (node.nodeType === Node.TEXT_NODE) { return document.createTextNode(node.textContent); } // 如果是元素节点,则创建对应的 HTML 元素并添加子元素 if (node.nodeType === Node.ELEMENT_NODE) { const element = document.createElement(node.nodeName); for (const attribute of node.attributes) { element.setAttribute(attribute.nodeName, attribute.nodeValue); } for (const childNode of node.childNodes) { const childElement = convertNodeToElement(childNode); element.appendChild(childElement); } return element; } return null; } </script> </body> </html> ``` 这个示例代码将文件输入元素和预览容器元素添加到 HTML 页面中,并使用 JSZip 和 Docxtemplater 库将 Word 文档转换HTML,并使用 JavaScript 将渲染结果转换HTML 元素,最后将结果显示在预览容器中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值