【问题标题】:Simple-html-dom skips attributesSimple-html-dom 跳过属性
【发布时间】:2013-06-20 12:07:57
【问题描述】:

我正在尝试解析 Google play 的 html 页面并获取有关应用程序的一些信息。 Simple-html-dom 工作完美,但如果页面包含没有空格的代码,它会完全忽略属性。例如,我有 html 代码:

<div class="doc-banner-icon"><img itemprop="image"src="https://lh5.ggpht.com/iRd4LyD13y5hdAkpGRSb0PWwFrfU8qfswGNY2wWYw9z9hcyYfhU9uVbmhJ1uqU7vbfw=w124"/></div>

如您所见,imagesrc 之间没有任何空格,因此 simple-html-dom 忽略了 src 属性并仅返回 &lt;img itemprop="image"&gt;。如果我添加空间,它会完美运行。要获取此属性,我使用以下代码:

foreach($html->find('div.doc-banner-icon') as $e){          
        foreach($e->find('img') as $i){
            $bannerIcon = $i->src;              
        }
}

我的问题是如何更改这个漂亮的库以获取此div 的完整内部文本?

【问题讨论】:

  • 您可以使用PHP's DOMDocument 代替简单的 HTML Dom Parser。否则,只需查看codepad.org/HdUQKx3l 的这个 sn-p,只需通过 DOMDocument 加载和保存 HTML 就会在 Simple HTML Dom Parser 上添加您需要的空间。

标签: php parsing simple-html-dom


【解决方案1】:

我只是创建了向内容添加必要空格的函数:

function placeNeccessarySpaces($contents){
$quotes = 0; $flag=false;
$newContents = '';
for($i=0; $i<strlen($contents); $i++){
    $newContents.=$contents[$i];
    if($contents[$i]=='"') $quotes++; 
    if($quotes%2==0){
        if($contents[$i+1]!== ' ' && $flag==true) {             
            $newContents.=' ';
            $flag=false;
        }           
    }
    else $flag=true;        
}   
return $newContents;
}

然后在file_get_contents函数之后使用。所以:

$contents = file_get_contents($url, $use_include_path, $context, $offset);
$contents = placeNeccessarySpaces($contents);

希望对其他人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 2010-11-20
    • 1970-01-01
    • 2020-09-09
    • 2014-08-25
    相关资源
    最近更新 更多