替换属性值的最佳方法

时间:2015-08-11 13:02:10

标签: php html

我正在开发一个从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属性的最有效方法。

2 个答案:

答案 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)

如果您尝试执行此服务器端,如标记所示,preg_replace应该有效。

Heres a quick example.

$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。这是一个示例。但请注意,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")); 
});