2012-02-24 50 views
1

工作,我有一个非常简单的代码是这样的:要疯了的getElementsByTagName不是PHP 5.3.3

$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 
} 

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

我怀疑这与编码有关,可能是$ data中的某些字符有一个不好的编码或某些东西,但我不知道如何解决它。有关PHP 5.3.3的一个已知的错误?

+0

您是否在每次安装时使用不同的libxml版本?你得到了什么libxml错误?在查询'/ img'中是否使用'DOMXPath'也不显示任何内容? – 2012-02-24 15:12:18

回答

-1

我建议你看看PHP文档页面上的评论, 看起来像有一个在DOM文档使用的一些有用的建议: http://de.php.net/manual/en/domdocument.getelementsbytagname.php

你问(最终)已知的bug#2之前, 你可能想看看它在https://bugs.php.net/

编辑:

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

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

+0

该页面的评论部分没有任何有用的建议。我已经完成了这一切...正如我在我的帖子上写的那样,相同的代码在php 5.3.6上工作......你是在谈论libxml2的问题吗? – FidoBoy 2012-02-24 12:55:34

+0

我的意思是“Philip N”关于getElementsByTagName返回一个动态列表的评论 - 可能是一个在PHP 5.3.3中使用foreach迭代的问题 - 我很抱歉,但我目前无法复制您的问题并进行调查,我现在只是猜测问题*可能会是什么。 – Jonas 2012-02-24 13:20:39

+0

是的,我已经接受了这个评论,但这不是我的情况,我没有改变我的循环中的dom树,所以这不适用于我。你对我的问题投了反对票,但我已经做了很多研究,直到我终于在这里问起了...... – FidoBoy 2012-02-24 13:27:54