PHP loadHTMLFile(table.html) errors


PHP loadHTMLFile(table.html) errors

这是我从旧表中加载数据的脚本,也就是说,它以一种"不可编辑"的方式

$document = new DOMDocument();
$document -> loadHTMLFile('http://www.table.html');
$rows   = $document -> getElementsByTagName('tr');

之后,我将<td>加载到数组中:

    $numRow = 0;
    foreach($rows as $result){
// 15 columns to load.
        for($i = 0; $i < 15; $i++){
        $array[$numRow][$i] = $result
        ->getElementsByTagName('td')
        ->item($i)
        ->nodeValue;
        }
    $numRow++;
    }

到目前为止,一切都很顺利,但问题开始了。所有行都有一个用于"description"的字符串列,并且在描述中经常出现人为错误输入错误,例如:

这是一个单元格:<td>Suppor<</td>(有人在这里误费了IDK如何)错误:Tag o invalid

或者当单元格包含像这样的"&"时:

另一个示例:<td>From A&A Limited.</td>错误:htmlParseEntityRef: expecting ';'

错误始终引用此行$document -> loadHTMLFile('http://www.table.html');

如您所见,该表15 columns $i = 4字符串列。我不是一个真正的专业程序员,也没有真正看到这种情况的到来。提前感谢任何可以帮我的人。

我不认为你会找到任何神奇的方法来修复损坏的 HTML,但你可以稍微改变 libxml(它为 DOMDocument 提供支持)处理错误的方式,以便它为您提供尽可能多的可用输出。 您是否尝试过将错误处理更改为内部处理? 查看 libxml_use_internal_errors()。

我找到了这样做的解决方案:

@$document -> loadHTMLFile('http://www.table.html');
$rows   = $document -> getElementsByTagName('tr');
$nodeListLength = htmlentities($rows->length);
for ($i = 0; $i < $nodeListLength; $i ++)
{
    $node = $gastos->item(0);
    //-> VALORES A MOSTRAR EN TU QUERY
}

我希望它可以帮助另一个有同样问题的人。感谢检查我问题的人。

$document->loadHTMLFile(...);之前尝试使用libxml_use_internal_errors(true);