发疯 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 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章