【问题标题】:PHP search & replace img srcPHP 搜索 & 替换 img src
【发布时间】:2016-06-03 01:02:15
【问题描述】:

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

我在本地工作 (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 从上面我们发现损坏的图像,然后将 only 替换为“http://example.com” 的部分为“http://127.0.0.1/projectfile”。 p>

所以我想要的是扫描整个文档以查找损坏的图像,如果我找到其中的 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 文件夹并直接粘贴到本地文件夹,但我需要让它更聪明一点:)

【问题讨论】:

  • 您想这样做的原因是什么?如果您应该使用服务器端 (php) 或客户端 (javascript/jquery),原因就更清楚了
  • 我会考虑为此使用 .htaccess - 如果它是 Apache 服务器。如果链接未在真实文件处结束,它将非常清晰快速并自动重定向到现有图像。看到这个(当然你需要一些改变才能使它与图像文件等一起工作。):stackoverflow.com/questions/5190206/…
  • 图像是如何创建的?是否可以检查它们是否存在并在创建时替换它们?
  • 嗨!感谢您的迅速回复!我想这样做的原因是因为我现在正在一个实时网站上工作,该网站有很多页面,也有很多损坏的图像链接。实时文件中的所有 img src 都是相关的“/images/something/image.jpg”,因为我必须离线工作(在服务器上上传新图像很痛苦..长篇故事..)我想以某种方式确保我的离线文件将能够首先从实时网站“拖动”实时图像,如果没有,那么我应该使用需要放置的新图像文件离线(然后在线)创建一个子目录/文件路径跨度>

标签: php jquery image search replace


【解决方案1】:

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

【讨论】:

  • 关于我将如何实现这一目标的任何想法?目前我只能找到用固定路径(“path/to/sorry-image-is-broken.jpg”)替换整个img src路径的方法,但不能搜索和部分替换img-src
  • 你可以像这样拆分href值 $('.myTargetClass').attr('href').split('/')
【解决方案2】:

使用 jquery 错误事件来检测丢失的图像并替换它们。以下代码应该可以解决问题

$(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"));
  });
});
<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" />

【讨论】:

  • 还为图像添加一个属性,这样如果替换的图像也不存在,它不应该陷入循环。例如在纯 js if (this.checked == undefined) { this.checked = 1; this.src = this.src.replace("http://example.com","http://127.0.0.1"); }
  • 成功了!!!!尽管对背景图像(css)做同样的事情,但我遇到了问题!我尝试了 $(this).css('background').replace("example.com", "127.0.0.1") 但没有任何反应:(
【解决方案3】:

.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。

【讨论】:

  • 如果 OP 的所有图像都来自他们自己的服务器,这可能是一个解决方案。
【解决方案4】:

谢谢你们!! 虽然我最初是在寻找一种 PHP 方法来执行此操作,但显然 JQuery 也能正常工作!

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 2016-03-09
    • 2017-01-10
    • 2014-05-07
    • 2019-04-27
    相关资源
    最近更新 更多