提问人:Pascal Polleunus 提问时间:11/8/2023 更新时间:11/8/2023 访问量:42
如何处理PHP xml_parse的“无效字符”错误?
How to handle "invalid character" errors with PHP xml_parse?
问:
在解析从受信任的第三方收到的文件时,我遇到了由无效的 HTML 实体引起的错误(请参阅下面的奇怪事情)。Invalid character (error code: 9)

我该如何处理这种问题?(以便文件仍被解析)
例如,只需删除无效字符即可。
由于我需要处理大文件(50MB),因此我正在使用.因此,在将部分 read () 传递给 XML 解析器之前检查/清理该部分是不安全的。fread()
$data
$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, FALSE);
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");
$fp = fopen($file, "rb");
while ($data = fread($fp, 4096)) {
if (!xml_parse($parser, $data, feof($fp))) {
$errorCode = xml_get_error_code($parser);
printf(
"XML Parser: %s (error code: %d). File: %s, line %d, column %d.",
xml_error_string($errorCode),
$errorCode,
$file,
xml_get_current_line_number($parser),
xml_get_current_column_number($parser),
);
}
}
3件奇怪的事情:
我在 4 个文件(共 24 个)中遇到了同样的问题。
所有这些有问题的文件在 2 个不同的行上都有 2 倍的无效字符。
错误消息始终相同,表示第一次出现的行号(两行的内容实际上相同,因此列也相同,这是正常的,但可能是错误的)。相同的错误消息显示次数过多。
文件1:126.38KB,4次。档案2:11.70MB,4次。档案3: 36.64MB, 70倍.文件4:4.55MB,96次。
注意:在每个文件之后调用。无论如何,PHP > 8.0.0,所以不再需要了。xml_parser_free($parser); $parser = NULL;
错误消息指示错误的 (?) 列号。
该行的相关部分是 。
无效字符位于第 325 列,但错误消息显示 312(即“技术”中的“e”)。excellent technical knowhow in design
答: 暂无答案
评论