替换属性值的最佳方法


Best way to replace value of attribute

我正在编写一个从iTunes获取图片的脚本。不幸的是,image元素并没有开箱显示图像,它使用了一个占位符图像,实际的图像url存储在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" />
<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简单HTML DOM解析器来抓取图片。可能有一种内置的方法来替换属性,但我所有的尝试都没有结果。

我正在寻找的是用每个图像的swap-src属性替换src属性的最有效方法。

我是这样做的。

$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()函数

如果您尝试在服务器端执行此操作,如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);

或者,这可以使用Javascript在客户端完成。下面是一个jquery示例。但是要注意,src-swap不是一个有效的属性。如果您使用的是自定义数据属性,则应该是data-src-swap

$("img").each(function() {
    var swap = $(this).attr("src-swap");
    $(this).attr("src", swap);
    // alert($(this).attr("src")); 
});