代码:
$str = '<a href="http://www.x.com/y.zip">etc</a> <br /> <a href="http://www.c.com/yz.rar">etc</a> <br /> <a href="http://www.c.com/b/c/yz.zip.html">etc</a> <br /> <a href="http://www.c.com/a/yz.rar.html">etc</a>';
echo $str;
输出:
<a href="http://www.x.com/y.zip">etc</a> <br /> <a href="http://www.c.com/yz.rar">etc</a> <br /> <a href="http://www.c.com/b/c/yz.zip.html">etc</a> <br /> <a href="http://www.c.com/a/yz.rar.html">etc</a>
我需要这个输出(仅适用于href html标签):
y.zip
yz.rar
yz.zip.html
yz.rar.html
我只需要例如.zip.html example.rar.html和example.rar example.zip
我该怎么做?
感谢您的帮助。
答案 0 :(得分:1)
所以,我知道你的问题是解析那个特定的字符串。但我发现自己想知道为什么字符串中有几个由换行符分隔。他们来自哪里?
回答你的问题:
$str = 'http://www.x.com/y.html <br /> http://www.c.com/yz.html <br /> http://www.c.com/b/c/yz.txt <br /> http://www.c.com/a/yz.zip <br /> http://www.c.com/a/yz.jpg <br /> http://www.c.com/a/e/yz.rar';
$urls = explode('<br /> ', $str);
foreach($urls as $url) {
echo basename($url).'<br>';
}
请记住,这并不是解决这个问题的好方法,但考虑到您的要求,这是我能想到的最佳方式。如果您能够以更好的形式接收信息,那么您可以做一些更有意义的事情。
<强>更新强>
在OP更新问题之后,这是一个更好的答案:
$html = '<a href="http://www.x.com/y.zip">etc</a> <br /> <a href="http://www.c.com/yz.rar">etc</a> <br /> <a href="http://www.c.com/b/c/yz.zip.html">etc</a> <br /> <a href="http://www.c.com/a/yz.rar.html">etc</a>';
$dom = new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('a') as $node) {
echo basename($node->getAttribute('href')).'<br>';
}
这将分析您的字符串中的标记(我假设您正在从文档或其他内容中解析它?),然后遍历a
标记并获取href
的基本名称每个人的属性。
修改强>
根据OP的最后评论,您可能对pathinfo
而不是basename
更感兴趣,如上所述:
$dom = new DOMDocument;
$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('a') as $node) {
$pathInfo = pathinfo($node->getAttribute('href'));
$fileExtension = $pathInfo["extension"];
$fileName = $pathInfo["filename"];
}
您可以阅读有关PHP pathinfo
here