如何获取 PHP 中锚标记之间的文本(文件名)?
How to get text(file names) present between anchor tags in PHP?
我一直在跟踪字符串,其中文件名出现在锚标记之间:
$test1 = test<div class="comment_attach_file">
<a class="comment_attach_file_link" href="http://52.1.47.143/feed/download/year_2015/month_04/file_3b701923a804ed6f28c61c4cdc0ebcb2.txt" >phase2 screen.txt</a><br>
<a class="comment_attach_file_link_dwl" href="http://52.1.47.143/feed/download/year_2015/month_04/file_3b701923a804ed6f28c61c4cdc0ebcb2.txt" >Download</a>
</div>;
$test2 = This is a holiday list.<div class="comment_attach_file">
<a class="comment_attach_file_link" href="http://52.1.47.143/feed/download/year_2015/month_04/file_2c96b997f03eefab317811e368731bb6.pdf" >Holiday List-2013.pdf</a><br>
<a class="comment_attach_file_link_dwl" href="http://52.1.47.143/feed/download/year_2015/month_04/file_2c96b997f03eefab317811e368731bb6.pdf" >Download</a>
</div>;
$test3 = <div class="comment_attach_file">
<a class="comment_attach_file_link" href="http://52.1.47.143/feed/download/year_2015/month_04/file_8479c0b60867fdce35ae94a668dfbba9.docx" >sample2.docx</a><br>
</div>;
从第一个字符串我想要文本(即文件名)"phase2 screen.txt"
从第二个字符串我想要文本(即文件名)"Holiday List-2013.pdf"
从第三个字符串我想要文本(即文件名)"sample2.docx"
在 PHP 使用 $dom = new DOMDocument;
我应该怎么做?
请有人帮助我。
谢谢。
如果您想获取用户浏览器中显示的井号或锚点后的值:"standard" HTTP 无法做到这一点,因为该值永远不会发送到服务器(因此它赢了' 在 $_SERVER["REQUEST_URI"]
或类似的预定义变量中可用)。您需要在客户端使用某种 JavaScript 魔法,例如将此值包含为 POST 参数。
在 dom 中,您可以使用类似这样的函数来获取链接并根据需要进行更改
function findAnchors($html)
{
$links = array();
$doc = new DOMDocument();
$doc->loadHTML($html);
$navbars = $doc->getElementsByTagName('div');
foreach ($navbars as $navbar) {
$id = $navbar->getAttribute('id');
if ($id === "anchors") {
$anchors = $navbar->getElementsByTagName('a');
foreach ($anchors as $a) {
$links[] = $doc->saveHTML($a);
}
}
}
return $links;
}
您可以使用 DOMxpath 定位包含您想要的文本的 link,使用它的 class 指向它:
$dom = new DOMDocument;
for($i = 1; $i <= 3; $i++) {
@$dom->loadHTML(${"test{$i}"});
$xpath = new DOMXpath($dom);
$file_name = $xpath->evaluate('string(//a[@class="comment_attach_file_link"])');
echo $file_name , '<br/>';
}
或者如果您不想使用 xpath,您可以获取锚元素并检查它的 class,如果是那个,则获取 ->nodeValue
:
$dom = new DOMDocument;
for($i = 1; $i <= 3; $i++) {
@$dom->loadHTML(${"test{$i}"});
foreach($dom->getElementsByTagName('a') as $anchor) {
if($anchor->getAttribute('class') === 'comment_attach_file_link') {
echo $anchor->nodeValue, '<br/>';
break;
}
}
}
我一直在跟踪字符串,其中文件名出现在锚标记之间:
$test1 = test<div class="comment_attach_file">
<a class="comment_attach_file_link" href="http://52.1.47.143/feed/download/year_2015/month_04/file_3b701923a804ed6f28c61c4cdc0ebcb2.txt" >phase2 screen.txt</a><br>
<a class="comment_attach_file_link_dwl" href="http://52.1.47.143/feed/download/year_2015/month_04/file_3b701923a804ed6f28c61c4cdc0ebcb2.txt" >Download</a>
</div>;
$test2 = This is a holiday list.<div class="comment_attach_file">
<a class="comment_attach_file_link" href="http://52.1.47.143/feed/download/year_2015/month_04/file_2c96b997f03eefab317811e368731bb6.pdf" >Holiday List-2013.pdf</a><br>
<a class="comment_attach_file_link_dwl" href="http://52.1.47.143/feed/download/year_2015/month_04/file_2c96b997f03eefab317811e368731bb6.pdf" >Download</a>
</div>;
$test3 = <div class="comment_attach_file">
<a class="comment_attach_file_link" href="http://52.1.47.143/feed/download/year_2015/month_04/file_8479c0b60867fdce35ae94a668dfbba9.docx" >sample2.docx</a><br>
</div>;
从第一个字符串我想要文本(即文件名)"phase2 screen.txt"
从第二个字符串我想要文本(即文件名)"Holiday List-2013.pdf"
从第三个字符串我想要文本(即文件名)"sample2.docx"
在 PHP 使用 $dom = new DOMDocument;
我应该怎么做?
请有人帮助我。
谢谢。
如果您想获取用户浏览器中显示的井号或锚点后的值:"standard" HTTP 无法做到这一点,因为该值永远不会发送到服务器(因此它赢了' 在 $_SERVER["REQUEST_URI"]
或类似的预定义变量中可用)。您需要在客户端使用某种 JavaScript 魔法,例如将此值包含为 POST 参数。
在 dom 中,您可以使用类似这样的函数来获取链接并根据需要进行更改
function findAnchors($html)
{
$links = array();
$doc = new DOMDocument();
$doc->loadHTML($html);
$navbars = $doc->getElementsByTagName('div');
foreach ($navbars as $navbar) {
$id = $navbar->getAttribute('id');
if ($id === "anchors") {
$anchors = $navbar->getElementsByTagName('a');
foreach ($anchors as $a) {
$links[] = $doc->saveHTML($a);
}
}
}
return $links;
}
您可以使用 DOMxpath 定位包含您想要的文本的 link,使用它的 class 指向它:
$dom = new DOMDocument;
for($i = 1; $i <= 3; $i++) {
@$dom->loadHTML(${"test{$i}"});
$xpath = new DOMXpath($dom);
$file_name = $xpath->evaluate('string(//a[@class="comment_attach_file_link"])');
echo $file_name , '<br/>';
}
或者如果您不想使用 xpath,您可以获取锚元素并检查它的 class,如果是那个,则获取 ->nodeValue
:
$dom = new DOMDocument;
for($i = 1; $i <= 3; $i++) {
@$dom->loadHTML(${"test{$i}"});
foreach($dom->getElementsByTagName('a') as $anchor) {
if($anchor->getAttribute('class') === 'comment_attach_file_link') {
echo $anchor->nodeValue, '<br/>';
break;
}
}
}