当前位置: 首页 > 面试题库 >

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

晏昀
2023-03-14
问题内容

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

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

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

我也得到:

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

是什么导致该错误?

我正在使用simplexml_load_file

更新:

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


问题答案:

您可以控制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;
}


 类似资料:
  • 问题内容: 例如我有以下代码 并引发异常 我不在乎是否未读取某些行,但是如何跳过无效字符并继续读取行? 问题答案: 您可以通过调用来影响字符集解码处理无效输入的方式。 通常, 您永远不会直接看到对象,因为它将在后台为您创建。因此,如果需要访问它,则需要使用API​​,该API允许您直接指定(而不是仅编码名称或)。 此类API的最基本示例是: 请注意,此代码使用了Java 7类,对于早期版本,你可以

  • 问题内容: 我想根据以下条件在PHP中修改我的xml文件。 我的xml结构如下所示: 现在每次在xml进行修改时,都带有type属性。 意味着,第一次搜索字符串==“ hotels”时,与酒店有关的数据将以上述格式存储在xml文件中。 现在,当再次搜索酒店时,它将删除具有带有值酒店的子元素的元素。 然后在与学校相关的数据附加到xml文件时,进行针对学校的不同查询。与酒店的数据。 现在再次搜索学校已

  • 总之,我正在尝试解析中的xml。但是XMLSpy告诉我xml的格式不好。 我相信这xml中包含了一些无效字符()。因为如果我把它拿走。XMLSpy的验证已通过。我认为UTF-8编码不允许这种字符。但是如果我真的想加入这种角色呢。我应该应用哪种编码?谢谢

  • 使用poi读取某些excel失败,遇到此错误 从,存在

  • 我必须在运行时动态生成一个xml文件。请帮助我使用PHP动态生成下面的XML文件。 null

  • 我有这个PHP脚本,它将表单的内容与图像一起上传到数据库。现在,我想让它上传一切,当它被选中(作品),并跳过上传图像部分,上传一切,但图像,如果不是。 下面是在服务器上上传图像的部分。 当我尝试插入没有图像的表单内容时,它会返回: 警告:getimagesize():第14行C:\xampp\htdocs\vinhub\inc\addpost.inc.php中的文件名不能为空 文件不是图像。对不起