我正在开发一个从iTunes中获取图片的脚本。遗憾的是,图像元素不会显示开箱即用的图像,它使用占位符图像,实际图像网址存储在图像元素的另一个属性中。
示例:
<img width="100" height="100" src-swap="http://a5.mzstatic.com/us/jfd25732df/cover100x100.jpeg" class="artwork" src="https://s.mzstatic.com/htmlResources/9E1F/frameworks/images/p.png" />
<img width="100" height="100" src-swap="http://a5.mzstatic.com/us/h63qz8uil5/cover100x100.jpeg" class="artwork" src="https://s.mzstatic.com/htmlResources/9E1F/frameworks/images/p.png" />
<img width="100" height="100" src-swap="http://a5.mzstatic.com/us/h8534edcbn/cover100x100.jpeg" class="artwork" src="https://s.mzstatic.com/htmlResources/9E1F/frameworks/images/p.png" />
我看了一下preg_match_all,但没有真正到达任何地方,主要是因为src-swap属性在每张图片上都有不同的值。
我的整个脚本使用PHP Simple HTML DOM Parser来抓取图片。可能有一种内置的方法来替换属性,但我的所有尝试都无处可去。
我正在寻找的是用每个图像的swap-src属性替换src属性的最有效方法。
答案 0 :(得分:1)
我就是这样做的。
$string = '<img width="100" height="100" src-swap="http://a5.mzstatic.com/us/jfd25732df/cover100x100.jpeg" class="artwork" src="https://s.mzstatic.com/htmlResources/9E1F/frameworks/images/p.png" />';
function get_string_between($string, $start, $end){
$string = " ".$string;
$ini = strpos($string,$start);
if ($ini == 0) return "";
$ini += strlen($start);
$len = strpos($string,$end,$ini) - $ini;
return substr($string,$ini,$len);
}
function swapSource($string){
$srcswap = get_string_between($string, "src-swap=\"", "\" class");
$src = get_string_between($string, "src=\"", "\"");
return str_replace($src,$srcswap,$string);
}
echo swapSource($string);
只需为每个图像调用swapSource()函数。
答案 1 :(得分:1)
如果您尝试执行此服务器端,如php标记所示,preg_replace
应该有效。
$image = '<img width="100" height="100" src-swap="http://a5.mzstatic.com/us/jfd25732df/cover100x100.jpeg" class="artwork" src="https://s.mzstatic.com/htmlResources/9E1F/frameworks/images/p.png" />';
$replace = preg_replace('/src-swap="(.*?)"(.*?)src="(.*?)"/', 'src-swap="$1"$2src="$1"', $image);
echo ($replace);
或者,这可以完成client side using Javascript。这是一个jquery示例。但请注意,src-swap
不是有效属性。如果您使用自定义数据属性it should be data-src-swap
。
$("img").each(function() {
var swap = $(this).attr("src-swap");
$(this).attr("src", swap);
// alert($(this).attr("src"));
});