我使用简单的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开发者,我只是从错误中吸取教训
答案 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();
?>