发疯 getElementsByTagName 在 PHP 5.3.3 上不起作用

Posted

技术标签:

【中文标题】发疯 getElementsByTagName 在 PHP 5.3.3 上不起作用【英文标题】:Going crazy getElementsByTagName not working on 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 一起使用也不会显示任何内容吗? 【参考方案1】:

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

在您询问(最终)关于 *** 的已知错误之前, 你可能想在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 树,所以这不适用于我。你对我的问题投了否定票,但我已经做了很多研究,直到我终于在这里问... 我不是投票否决你的问题的人(我什至没有足够的声望点来做这件事,即使我有我也不会否决它)。我只是想知道为什么它被否决了,因为它实际上是一个值得回答的问题。我现在仍在研究它并试图复制这种行为。

以上是关于发疯 getElementsByTagName 在 PHP 5.3.3 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

谷歌又发疯了

Android adb Logcat 在连接某些设备时发疯

UIScrollView 并不总是滚动让我发疯

自定义 UITableViewCell 创建了两次......让我发疯

合并 SQLite 数据库让我发疯。帮助?

jQuery .animate 淡入淡出发疯