PHP搜索&替换img src

时间:2016-02-21 17:35:37

标签: php jquery image search replace

好的,情况很简单(我希望!)

我在本地工作(xampp),在我的.php文件中,我有以下img元素:

<img src="http://example.com/images/project-1/image1.jpg"/>
<img src="http://example.com/images/project-1/image2.jpg" />
<img src="http://example.com/images/project-1/image3.jpg" />

如何使其能够运行搜索和替换功能(如果可能,使用php),以实现以下目标:

1)在页面加载时扫描整个文档并找到所有上面没有出现的图像(断开的链接)

2) IF 从上面我们找到了损坏的图片,然后用“http://example.com替换 部分”http://127.0.0.1/projectfile“ ”

所以我想要的是扫描整个文档是否有损坏的图像,如果我找到了x,那么从这里替换src:

src =“http://www.example.com/images/project-1/image1.jpg”

用这个:

SRC = “http://127.0.0.1/project/images/project-1/image1.jpg”

我想自动为所有图像执行此操作,而不是手动执行此操作。

目前我正在努力用jQuery做这个,但我可能需要PHP,因为我需要导航到以前的文件夹,扫描目录等等

感谢您的支持! 任何想法或提示?

到目前为止,我所尝试和成功的部分正如我上面所说的那样是用jQuery搜索/替换:

$('img').attr('src',function(i,e){
    return e.replace("http://example.com","http://127.0.0.1");
})

,它会忽略实时网站的src文件夹并直接粘贴到本地文件夹,但我需要让它更聪明一点:)

4 个答案:

答案 0 :(得分:2)

使用jquery错误事件来检测丢失的图像并替换它们。以下代码应该做的伎俩

&#13;
&#13;
$(document).ready(function(){
  $('img').on('error',function(){
    // Avoid endless loop for noexistant images
    if($(this).data('alreadyChecked')) return; 
    $(this).data('alreadyChecked',true);
    
    //Replace src
    $(this).attr('src', $(this).attr('src').replace("http://example.com","http://127.0.0.1"));
  });
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<img src="http://example.com/images/project-1/image1.jpg"/>
<img src="http://example.com/images/project-1/image2.jpg" />
<img src="http://example.com/images/project-1/image3.jpg" />
&#13;
&#13;
&#13;

答案 1 :(得分:1)

使用.htaccess的解决方案是最佳方法。 PHP不会这样做,因为PHP在页面加载之前执行。当这些元素出现在您的页面上时,PHP已经为时已晚,无法触摸它们。我确定jQuery的hack可以解决这个问题,但它不会可靠,它会减慢你的负载,你可能会闪烁,因为jQuery无法触摸项目,直到页面加载之后,并且那一点你的破碎链接已经显示,直到jQuery替换它们。

在.htaccess文件中尝试此操作:

RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} \.(gif|jpg|jpeg|png)$
RewriteRule ^.*/images/(.*)/(.*)$ http://127.0.0.1/project/images/$1/$2 [L,R=301]

.htaccess将在PHP或jQuery甚至看到内容之前替换请求级别的URL。

答案 2 :(得分:0)

实现您想要的最好方法是使用javascript / jquery并在满足条件(断开链接)时替换href值。

答案 3 :(得分:0)

谢谢你们! 虽然我最初正在寻找一种PHP方法来实现这一点,但显然JQuery也可以工作!

感谢@Nadeem Manzoor和其他人! :)