【发布时间】:2014-01-27 20:07:01
【问题描述】:
我需要在我的网站上创建下一个功能:用户写一篇文章并在其中附加图像,图像通常不存储在本地主机上。我需要将此图像下载到 localhost 并替换指向 localhost 图像的链接。
例如:
<img ... src="http://bob.com/img/image1.png" ... >
<img ... src="http://bob.com/img/image2.png" .... >
脚本会找到src的内容,下载图片并像这样替换它:
<img ... src="/images/image1.png" ... >
<img ... src="/images/image2.png" .... >
我了解如何从代码中解析所有src:
$subject = # i will put there article content (with img tags etc)
$result = array();
preg_match("/<img.*?src="(.*?)".*?>/", $subject, $result);
现在$result 数组将包含所有图片链接。好的。现在我有一些问题。
1) 如果我使用preg_replace,它会帮助我解决这个任务吗?在我看来不是,因为preg_replace 将立即替换内容(所以我无法下载图像,创建存储在本地主机图像上的新链接并以某种方式将其设置为preg_replace 的参数,因为它还在运行)。我对这个假设是否正确?
2) 好的。我可以组成一个数组,就像我说的那样。之后,我从这个数组下载所有图像。在那之后,不知何故,我将用新图像替换所有旧图像。我认为这更现实。我对吗?
类似的东西:
$subject = # i will put there article content (with img tags etc)
$result = array();
preg_match("/<img.*?src="(.*?)".*?>/", $subject, $result);
foreach($result as $src)
{
$new_src = downloadImage($src);
# somehow replace old image with new image there. How?
}
3)如果我使用第二种方法,我该如何替换链接?
【问题讨论】:
-
你试过Php::DomDocument 吗?操作 DOM 比 Regex 容易得多,而且是 OOP ;)
-
嗯。那你能举个例子吗?
-
在标题中看到“正则表达式”后跟“解析”。畏缩了。
-
试试 DOM,not regexes.