1

我有一个像下面这样的 html 结构,它是随机的 div 标签和 img 标签,这些也存储在数据库中。
现在我必须在下面的字符串中过滤 img src,以删除不在此结构中但存储在目录中的文件,
在前端使用 jquery 或服务器端使用 php 获取此结构中的 src 的最佳方法是什么。
任何建议如何做到这一点?非常感谢!!

在前端

<div class="h1">content<div>
<div class="h1" style="">content</div>
<div class="h1" style="">...</div>
<div class="h2">...</div>
<div class="h1" style="">content</div>
<img src="u_img/5/1.png" style="" class="">
<div class="link" style="">link: http://...</div>
<img src="u_img/5/14.jpeg" style="" class="">
<div class="h1" style=""..</div>
<img src="u_img/5/3.png" style="" class="">

在数据库中

<div class="h1">content<div><div class="h1" style="">content</div><div class="h1" style="">...</div><div class="h2">...</div><div class="h1" style="">content</div><img src="u_img/5/1.png" style="" class=""><div class="link" style="">link: http://...</div><img src="u_img/5/14.jpeg" style="" class=""><div class="h1" style=""..</div><img src="u_img/5/3.png" style="" class="">

更新
,如果我通过 jquery 将这些 img src 在数组中的前端存储中获取到 php 文件,如下所示,那么如何删除不在此数组中的那些文件

var srcArray=$('img').map(function(){
    return $(this).attr('src');
});
var fd = new FormData(uf[0]);
fd.append('srcArray',srcArray);
$.ajax({
    type: "POST", url: "img_clean.php",
    data: fd,
    processData: false, contentType: false,
})

php

$srcArray = $_POST['srcArray']; 

//How to delete file not in the array?

foreach($srcArray as $row){
    $dir = "u_img_p/".$id;  
        //unlink($dir.'/'.$row);
    } 
}
4

3 回答 3

1

用于attr()获取 src

 $('img').each(function(){
    var $src=$(this).attr('src'); //prop() for latest versio of jquery.
    //do you stuff ..$src is the source 
 });

或者您可以使用 map() 将所有源存储在一个数组中

var srcArray=$('img').map(function(){
    return $(this).attr('src'); //prop() for latest versio of jquery.

 });

srcArray将拥有所有图像源。

注意:$('img')选择文档中存在的所有图像标签..小心

编辑后更新。

$.ajax({
 type: "POST", 
 url: "img_clean.php",
 data: {'postedValue':srcArray},
 processData: false, contentType: false,
})

PHP

$srcArray = $_POST['postedValue']; 

foreach($srcArray as $row){
  $dir = "u_img_p/".$id;  
   unlink($dir.'/'.$row); //delete it
  } 
}
于 2013-07-25T11:04:32.323 回答
1

使用正则表达式应该可以为您解决问题

preg_replace("/<img[^>]+\>/i", "empty", $mydatabasecontent)
于 2013-07-25T11:12:33.667 回答
0
var sources = [];

$("img").each(function(){
   sources.push($(this).prop("src")); // for older jQuery versions use attr("src");
});

这会将所有图像源添加到一个数组中。

于 2013-07-25T11:05:07.097 回答