如何在php中使用特定字符串更改src属性

时间:2016-07-04 10:37:40

标签: php regex

我使用简单的html dom来做这件事,有一些img标签。我想用特定字符串更改某些src的位置。我想将给定文本中包含http://localhost.com的网址更改为https://i0.wp.com/localhost.com

示例:

$data='<p><img class="alignnone wp-image-36109 size-full" src="https://localhost.com/wp-content/uploads/2014/10/WjhzQlNRaDJrYUUx_o_using-freedom-for-unlimited-in-app-purchases-android-.jpg" alt="WjhzQlNRaDJrYUUx_o_using-freedom-for-unlimited-in-app-purchases-android-" width="480" height="360"/></p>

&#39 ;;

我使用下面的代码搜索https://localhost.com,但我该如何更改呢。

$html->find('img[src^=https://localhost.com/]');

来自简单的html dom的结果:

它给了我搜索值,但我想用某些东西改变值。我已经告诉过了。

我也使用这个正则表达式来完成这项工作。

echo preg_replace("/(<img.*src=)[\"'](.*)[\"']/m",'\1"https://i0.wp.com/\2\"',$data);

但它让我像

一样
<p><img class="alignnone wp-image-36109 size-full" src="https://i0.wp.com/https://localhost.com/wp-content/uploads/2014/10/WjhzQlNRaDJrYUUx_o_using-freedom-for-unlimited-in-app-purchases-android-.jpg" alt="WjhzQlNRaDJrYUUx_o_using-freedom-for-unlimited-in-app-purchases-android-" width="480" height="360\"/></p>

所有src都在https://i0.wp.com/,但在正则表达式中,我想得到这个结果:

正则表达式的结果:

https://i0.wp.com/https://i0.wp.com/localhost.com/wp-content/uploads/2016/03/sd.png?resize=300%2C300

想要获得结果:

https://i0.wp.com/i0.wp.com/localhost.com/wp-content/uploads/2016/03/sd.png?resize=300%2C300

有人能给我提供这个的线索吗,你也可以在正则表达式中给我答案。这对我有帮助。希望您了解我的问题,您可以在下面发表评论以获取更多信息。

最重要的是,如果有人想给这个问题一个投票,请这样做但请请评论下面为什么你这样做,我不是像你这样的天才php开发者,我只是从错误中吸取教训

1 个答案:

答案 0 :(得分:1)

你去了(这使用了具有xpath和正则表达式的远优DOMDocument库):

<?php

$data='<p><img class="alignnone wp-image-36109 size-full" src="https://localhost.com/wp-content/uploads/2014/10/WjhzQlNRaDJrYUUx_o_using-freedom-for-unlimited-in-app-purchases-android-.jpg" alt="WjhzQlNRaDJrYUUx_o_using-freedom-for-unlimited-in-app-purchases-android-" width="480" height="360"/></p>';

$dom = new DOMDocument();
$dom->loadHTML($data);

$xpath = new DOMXPath($dom);

# filters images 
$needle = 'https://localhost.com';
$images = $xpath->query("//img[starts-with(@src, '$needle')]");

# split on positive lookahead
$regex = '~(?=localhost\.com)~';
foreach ($images as $image) {
    $parts = preg_split($regex, $image->getAttribute("src"));
    $newtarget = $parts[0] . "i0.wp.com/i0.wp.com/" . $parts[1];
    $image->setAttribute("src", $newtarget);
}

# just to show the result
echo $dom->saveHTML();
?>

请参阅a demo on ideone.com