【问题标题】:Going crazy getElementsByTagName not working on PHP 5.3.3发疯 getElementsByTagName 在 PHP 5.3.3 上不起作用
【发布时间】:2012-02-24 12:40:14
【问题描述】:

我有一个非常简单的代码:

$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($data);
libxml_clear_errors();
$dom->preserveWhiteSpace = false;
foreach($dom->getElementsByTagName('img') as $img) {
    // do something here
}

变量 $data 包含来自外部 URL 的 HTML。好的,如果我使用我的本地网络服务器使用 PHP 5.3.6 测试此代码,它可以工作并返回该页面中的所有 img 标签,但是在另一台使用 PHP 5.3.3 的服务器上运行的相同代码不起作用!它不会从 SAME $data 值返回所有 img 标签...它只返回前 13 张图像。

我怀疑这与编码有关,可能是 $data 中的某些字符编码错误或其他什么,但我不知道如何解决。 PHP 5.3.3 上存在与此相关的已知错误?

【问题讨论】:

  • 您是否在每次安装时使用不同的 libxml 版本?你得到什么 libxml 错误?将DOMXPath 与查询//img 一起使用也不会显示任何内容吗?

标签: php encoding domdocument


【解决方案1】:

我建议您查看 php 文档页面上的 cmets, 看起来有一些关于 DOMDocument 用法的有用建议: http://de.php.net/manual/en/domdocument.getelementsbytagname.php

在您询问(最终)关于 stackoverflow 的已知错误之前, 你可能想在https://bugs.php.net/上寻找它

编辑:

我想我已经找到了与该行为相关的错误:
https://bugs.php.net/bug.php?id=60762

即使它被标记为 5.4.0 RC 5 我也无法复制 提到的行为。
可能是 HTML 数据的问题(如您所述)。

【讨论】:

  • 该页面的 cmets 部分没有任何有用的建议。我已经阅读了所有内容...正如我在帖子中所写的,相同的代码正在 php 5.3.6 上运行...您是在谈论那个 cmets 中的 libxml2 问题吗?
  • 我的意思是“Philip N”关于 getElementsByTagName 返回动态列表的评论 - 在 PHP 5.3.3 中使用 foreach 迭代它可能是一个问题 - 对不起,但我目前不能复制您的问题并进行调查,我目前只是猜测问题可能是什么。
  • 是的,我已经阅读了该评论,但这不是我的情况,我没有更改循环中的 dom 树,所以这不适用于我。你对我的问题投了否定票,但我已经做了很多研究,直到我终于在这里问...
  • 我不是投票否决你的问题的人(我什至没有足够的声望点来做这件事,即使我有我也不会否决它)。我只是想知道为什么它被否决了,因为它实际上是一个值得回答的问题。我现在仍在研究它并试图复制这种行为。
猜你喜欢
  • 1970-01-01
  • 2011-11-16
  • 1970-01-01
  • 1970-01-01
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-29
相关资源
最近更新 更多