我使用简单的html dom从其他网站获取数据。在获取数据时,它使用纯文本和没有纯文本的方式获取超链接。我想在获取数据时删除没有纯文本(链接文本)的超链接。 我试过下面的代码
if($title==""){ echo "No text";}
和
if(ctype_space($title)) { echo "No text";}
其中$ title是从网站上提取的明文
但这两种方法都没有用。可以任何一个帮助
感谢您的帮助
答案 0 :(得分:1)
它真的需要“纯文本验证”吗?
阅读您的问题,似乎您只想删除空值的链接。
如果后者是真的,你可以这样做:
$html = <<<EOL
<a href="#">Text</a>
<a href="#"></a>
<a href="#">More Text</a>
<a href="#"></a>
EOL;
$dom = new DOMDocument;
$dom->loadHTML($html);
$links = $dom->getElementsByTagName('a');
foreach ($links as $link) {
if (strlen(trim($link->nodeValue)) == 0) {
$link->parentNode->removeChild($link);
}
}
var_dump($dom->saveHTML());
答案 1 :(得分:1)
直到你向我们提供更多关于什么价值的信息,我最好的猜测就是尝试这样的事情
if(empty($title))
{
echo "No Text";
}
答案 2 :(得分:1)
$dom = new DOMDocument;
$dom->loadHTML($html);
$xPath = new DOMXPath($html);
$links_array = $xPath->query("//a"); // select all a tags
$totalLinks = $links_array->length; // how many links there are.
for($i = 0; $i < $totalLinks; $i++) // process each link one by one
{
$title = $links_array->item($i)->nodeValue; // get LInkText
if($title == '') // if no link text
{
$url = $links_array->item($i)->getAttribute('href');
// do here what you want
}
}
答案 3 :(得分:-3)
您需要使用preg_match和正则表达式来提取链接文本。例如
if (preg_match("/<a.*?>(.*?)</",$title,$matches))
{
echo $matches[1];
}