PHP搜索及;更换img src

PHP搜索及;更换img src,php,jquery,image,search,replace,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" />

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

我在本地工作(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" />

,它忽略了live website src文件夹并直接粘贴到本地文件夹,但我需要让它更聪明一点:)

实现目标的最佳方法是使用javascript/jquery,在满足条件(断开的链接)时替换href值。

使用jquery错误事件检测丢失的图像并替换它们。下面的代码应该可以做到这一点

$(文档).ready(函数(){
$('img')。在('error',function()上{
//避免对不存在的图像进行无休止的循环
if($(this).data('alreadyChecked'))返回;
$(this).data('alreadyChecked',true);
//更换src
$(this.attr('src',$(this.attr('src')).replace('http://example.com","http://127.0.0.1"));
});
});

使用.htaccess的解决方案是解决此问题的最佳方法。PHP不会这样做,因为PHP在页面加载之前执行。当这些元素出现在您的页面上时,PHP已经太晚了。我相信jQuery的黑客攻击可以解决这个问题,但它不可靠,它会减慢你的加载速度,你可能会出现闪烁,因为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。

谢谢大家!! 虽然我最初是在寻找一种PHP方法来实现这一点,但显然JQuery也很管用


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

你想这样做的原因是什么?原因是如果你应该使用服务器端(PHP)或客户端(JavaScript /jQuery),我会考虑使用.HTAccess,如果它是Apache服务器。如果链接不是以真实文件结尾,它将非常清晰、快速并自动重定向到现有图像。看到这个(当然,你需要一些改变,使其与图像文件等工作):图像是如何创建的?是否可以检查它们是否存在,并在创建它们时进行替换?嗨!谢谢你的迅速回复!我想这样做的原因是因为我现在正在一个有很多页面和很多断开的图片链接的实时网站上工作。live文件中的所有img src都是相关的“/images/something/image.jpg”,因为我必须脱机工作(在服务器上上载新图像是一件痛苦的事情..说来话长..)我想确保我的脱机文件能够首先从live网站“拖动”live图像,如果没有,那么我应该离线(稍后在线)创建一个子目录/文件路径,其中包含需要放置的新图像文件。关于如何实现这一点,我有什么想法吗?目前,我只能找到用固定路径替换整个img src路径(“path/to/sorry image is breaked.jpg”)的方法,但不能搜索和部分替换img src。您可以像这样拆分href值$('.myTargetClass').attr('href').split('/'))如果OP的所有映像都来自其自己的服务器,则这是一个解决方案。还可以向映像添加属性,以便在替换的映像也不存在时,不会陷入循环。例如,在普通js
中,如果(this.checked==undefined){this.checked=1;this.src=this.src.replace(“http://example.com","http://127.0.0.1);}
这就成功了!!!!我有问题,但做同样的背景图像(css)!我尝试了$(this.css('background').replace(“,”),但什么也没发生:(
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]