一尘不染

如何使用PHP跳过XML文件中的无效字符

php

我正在尝试使用PHP解析XML文件,但出现错误消息:

解析器错误:字符0x0超出允许的范围

我认为这是因为XML的内容所致,我认为有一个特殊的符号“☆”,我有什么想法可以解决该问题?

我也得到:

解析器错误:标签项目行中的数据过早结束

是什么导致该错误?

我正在使用simplexml_load_file

更新:

我尝试找到错误行并将其内容粘贴为单个xml文件,它可以正常工作!所以我仍然不知道是什么使xml文件解析失败。PS这是一个超过100M的巨大xml文件,会引起解析错误吗?


阅读 281

收藏
2020-05-29

共1个答案

一尘不染

您可以控制XML吗?如果是这样,请确保将数据括在<![CDATA[.. ]]>块中。

并且您还需要清除无效字符:

/**
 * Removes invalid XML
 *
 * @access public
 * @param string $value
 * @return string
 */
function stripInvalidXml($value)
{
    $ret = "";
    $current;
    if (empty($value)) 
    {
        return $ret;
    }

    $length = strlen($value);
    for ($i=0; $i < $length; $i++)
    {
        $current = ord($value{$i});
        if (($current == 0x9) ||
            ($current == 0xA) ||
            ($current == 0xD) ||
            (($current >= 0x20) && ($current <= 0xD7FF)) ||
            (($current >= 0xE000) && ($current <= 0xFFFD)) ||
            (($current >= 0x10000) && ($current <= 0x10FFFF)))
        {
            $ret .= chr($current);
        }
        else
        {
            $ret .= " ";
        }
    }
    return $ret;
}
2020-05-29