2011-08-08 34 views
0

我有一个PHP应用程序,它读取一点HTML。在这个HTML中可能会有一个img标签。我想要做的是从图像标签的src中去除目录结构,例如HTML中的条状目录结构

<img src="dir1/dir2/dir3/image1.jpg> 
to 
<img src="image1.jpg"> 

任何人都有任何指针?

谢谢, 马克

+0

正则表达式是不好的HTML解析器 - 但如果您决定使用它,您可以使用它(假设您的img标签格式良好并使用双引号):'preg_replace(“/ src = \”。+ \ /(。+)\“/”,'“$ 1 “',$ string)' –

回答

0

作为一个建议,而不是使用正则表达式,你可能会更好使用像的SimpleXML类的东西来遍历HTML,这样你能找到的img标签和他们的src属性然后很容易改变它。而不必尝试用正则表达式解析整个文档。完成之后,您将能够使用“/”分隔符来分解字符串,并使用分解数组的最后一个值作为src属性。

PHP.net的SimpleXML手册:http://php.net/manual/en/book.simplexml.php

+0

试过这个但xml解析器不会解析我的html -

你好这是一个测试

0

这是一个教程如何改变一个HTML文档中的所有链接:Scraping Links From HTML

与示例略有修改,这可以做到这一点:

<?php 
require('FluentDOM/FluentDOM.php'); 
$html = '<img src="dir1/dir2/dir3/image1.jpg">'; 
$fd = FluentDOM($html, 'html')->find('//img[@src]')->each(
    function ($node) use ($url) { 
    $item = FluentDOM($node); 
    $item->attr('href', basename($item->attr('src'))); 
    } 
); 
$fd->contentType = 'xml'; 
header('Content-type: text/xml'); 
echo $fd; 
?> 
0

如果你想尝试这种与正则表达式这可能是工作:

$subject = "dir1/dir2/dir3/image1.jpg"; 
$pattern = '/^.*\//'; 

$result = preg_replace($pattern, '', $subject); 
+0

这似乎不工作 - 替换的结果是从文本

你好这是一个测试

+0

这只适用于src的内容而不是整个HTML。所以你必须提取src中的内容并传递它。看看Billy Moon的评论,他的正则表达式可能会像你想要的那样工作。但在HTML上使用regexp是一个坏主意,因为它并不总是正确的。 – Cheesebaron

+0

你会建议什么,而不是正则表达式? –