正则表达式的图像问题

时间:2014-10-16 06:55:35

标签: php html image

当我运行以下脚本时,图像渲染效果不佳。这里有什么问题?这是代码:

<?php
    header('Content-Type: text/html; charset=utf-8');
    $url = "http://www.asaphshop.nl/epages/asaphnl.sf/nl_NL/
            ObjectPath=/Shops/asaphnl/Products/80203122";
    $htmlcode = file_get_contents($url);
    $pattern = "/class=\"noscript\"\>(.*)\<\/div\>/isU";
    preg_match_all($pattern, $htmlcode, $matches);
    //print_r ($matches);
    $image = ($matches[0][0]);
    print_r ($image);
?>

这是我需要复制的链接的一部分(data-src-l部分):

<div id="ProductImages" class="noscript">
    <ul>  
        <li>
            <a href="/WebRoot/products/8020/80203122/bilder/80203122.jpg">
            <img itemprop="image" alt="Jesus Remember Me - Taize Songs (2CD)"
                 src="/WebRoot/AsaphNL/Shops/asaphnl/5422/8F43/62EE/
                     D698/EF8E/4DEB/AED5/3B0E/80203122_xs.jpg"
                 data-src-xs="/WebRoot/AsaphNL/Shops/asaphnl/5422/8F43/62EE/
                     D698/EF8E/4DEB/AED5/3B0E/80203122_xs.jpg"
                 data-src-s="/WebRoot/products/8020/80203122/bilder/80203122_s.jpg"
                 data-src-m="/WebRoot/products/8020/80203122/bilder/80203122_m.jpg"
                 data-src-l="/WebRoot/products/8020/80203122/bilder/80203122.jpg"
            />
            </a>
        </li>
    </ul>
</div>

2 个答案:

答案 0 :(得分:0)

使用DOMDocument (我希望你的女校长不会骂你)

$dom = new DOMDocument();
$dom->loadHTMLFile('http://www.asaphshop.nl/epages/asaphnl.sf/nl_NL/?ObjectPath=/Shops/asaphnl/Products/80203122');

$xpath = new DOMXPath($dom);

$url = $xpath->query('//div[@id="ProductImages"]/ul/li/a/img/@data-src-l')->item(0)->nodeValue;

echo $url;

答案 1 :(得分:0)

$pattern = "#class=\"noscript\">.*data-src-l=([\"'])(?<url>.*)\\1.*</div>#isU";

但是,与DOM结构一样处理页面更好,而不是字符串。 \\1([\"'])的反向引用,因此在字符串的末尾使用相同的引号。对于URL不是那么必要,因为它们中不应该有直接引用(未转义),但它对于通用目的是有好处的。

ps:如果您需要<img/>之间的所有内容(包括它们) - $pattern = '#class="noscript">.*(<img.*>).*</div>#isU';