我有一份学校的作业需要做,但我被卡住了。。。我需要制作一个脚本,它应该得到一个带有良好链接的图像,但我得到的只是一个空数组。请帮我做得更好!这是代码:
<?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">.*(<img.*>).*</div>#isU';
preg_match_all($pattern, $htmlcode, $matches);
//print_r ($matches);
$image = ($matches[0]);
print_r ($image);
?>
这是图像代码的一部分:
<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>
data-src-l的代码应该在https://www.asaphshop.nl
如果您使用了调试器,您会发现实际上您得到的不是一个空数组,而是一个包含['0']
键下一个值的数组的数组,即:
""class='"noscript'">'n <ul>'n 'n 'n 'n 'n 'n 'n 'n 'n 'n 'n <li>'n <a href='"/WebRoot/products/8020/80203122/bilder/80203122.jpg'">'n <img'n itemprop='"image'"'n alt='"Jesus Remember Me - Taize Songs (2CD)'"'n src='"/WebRoot/AsaphNL/Shops/asaphnl/5422/8F43/62EE/D698/EF8E/4DEB/AED5/3B0E/80203122_xs.jpg'"'n data-src-xs='"/WebRoot/AsaphNL/Shops/asaphnl/5422/8F43/62EE/D698/EF8E/4DEB/AED5/3B0E/80203122_xs.jpg'"'n data-src-s='"/WebRoot/products/8020/80203122/bilder/80203122_s.jpg'"'n 'n data-src-m='"/WebRoot/products/8020/80203122/bilder/80203122_m.jpg'"'n 'n data-src-l='"/WebRoot/products/8020/80203122/bilder/80203122.jpg'"'n />'n </a>'n </li>'n 'n 'n </ul>'n </div>""
正如您可能知道的,您的正则表达式$pattern
有问题。无论如何,用正则表达式解析HTML通常是个坏主意。你到底想达到什么目的?还有,这是你第五次在这里问同样的问题了吗?
更新:
如果您需要获取图像,请使用以下正则表达式:<img's[^>]*?src's*='s*[''"]([^''"]*?)[''"][^>]*?>
。使用它,您将捕获页面上所有图像的src
标记中的值,然后您可以使用它们创建自己的图像标记。像这样:
$htmlcode = file_get_contents($url);
$pattern = "/<img's[^>]*?src's*='s*[''"]([^''"]*?)[''"][^>]*?>/";
preg_match_all($pattern, $htmlcode, $matches);
$matches[0]
数组包含所有的图像标签,实际上有16个。$matches[1]
数组包含图像的src
属性中的所有值。你想用什么就用什么。