gpt4 book ai didi

php - loadXML 无法处理的错误

转载 作者:行者123 更新时间:2023-12-04 06:27:00 28 4
gpt4 key购买 nike

我正在使用梨 XML_Feed_Parser .
我有一些 bad xml我给它并得到错误。

DOMDocument::loadXML(): Input is not proper UTF-8, indicate encoding !
Bytes: 0xE8 0xCF 0xD3 0xD4 in Entity, line: 7

它实际上是编码错误的 html - KOI8-R。

出错是可以的,但我无法处理!

当我创建新的 XML_Feed_Parser 实例时

$feed = new XML_Feed_Parser($xml);

它调用看起来像这样的 __construct()
$this->model = new DOMDocument;
if (! $this->model->loadXML($feed)) {
if (extension_loaded('tidy') && $tidy) {
/* tidy stuff */
}
} else {
throw new Exception('Invalid input: this is not valid XML');
}

我们可以看到,如果 loadXML() 失败,那么它会抛出异常。

我想从 loadXML() 中捕获错误以跳过错误的 XML 并通知用户。所以我用 try-catch 包裹了我的代码
try
{
$feed = new XML_Feed_Parser($xml);
/* ... */
}
catch(Exception $e)
{
echo 'Feed invalid: '.$e->getMessage();
return False;
}

但即使在那之后我也收到了那个错误
DOMDocument::loadXML(): Input is not proper UTF-8, indicate encoding !
Bytes: 0xE8 0xCF 0xD3 0xD4 in Entity, line: 7

我读过 loadXML() 并发现

If an empty string is passed as the source, a warning will be generated. This warning is not generated by libxml and cannot be handled using libxml's error handling functions.



但不知何故,我得到的错误不是警告,而是停止了我的应用程序。我已经写了我的错误处理程序,我看到这真的是警告($errno 是 2)。

所以我看到了 2 个解决方案:
  • 将警告恢复为警告 - 不要
    把它们当作错误对待。 (谷歌
    在这里对我没有帮助)。在那之后
    从 loadXML 返回的句柄 False。
  • 以某种方式捕获该错误。

  • 有什么帮助吗?

    最佳答案

    libxml_use_internal_errors(true)解决了我的问题。它使 libxml 使用正常错误,因此我可以从 loadXML() 中捕获 False。

    关于php - loadXML 无法处理的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5923356/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com