这是我从旧表中加载数据的脚本,也就是说,它以一种"不可编辑"的方式
。$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);