如何在使用php的超链接中验证纯文本(链接文本)?

问题描述:

我正在使用简单的html dom从其他网站获取数据。在获取数据时,它会以纯文本和纯文本方式提取这两个超链接。我想删除链接,而不纯文本(链接文本),而获取数据.. 我曾尝试下面的代码如何在使用php的超链接中验证纯文本(链接文本)?

if($title==""){ echo "No text";} 

if(ctype_space($title)) { echo "No text";} 

其中$标题明文从网站获取

但两者方法didnt worked..can任意一个帮助

提前感谢您的帮助

+1

你可以给出'$ title'可能的例子吗?我不明白你的意思是纯文本。 – 2012-03-03 08:54:00

+0

你认为做一个[jsfiddle](http://jsfiddle.net/) – Neysor 2012-03-03 08:55:22

+0

对不起,在这样的链接Link text其中“网址”是网址和“链接文本”是明文 – Eka 2012-03-03 08:56:23

直到你给我们什么样的价值是我最好的猜测是尝试这样的事情

if(empty($title)) 
{ 
    echo "No Text"; 
} 

您需要使用preg_match和正则表达式来提取链接文本。例如

if (preg_match("/<a.*?>(.*?)</",$title,$matches)) 
{ 
    echo $matches[1]; 
} 
+0

使用简单的html dom我们可以提取链接文本http://*.com/questions/9518368/how-can-we-get-specific-links-using-simple-html-dom/9518469#9518469。我想要的是我必须验证是否有文本 – Eka 2012-03-03 09:06:55

+0

使用正则表达式来创建DOM对象并对其进行操作会更容易和更快 – 2012-03-03 09:43:43

+0

正则表达式只在知道数据结构时才会起作用。 HTML通常无效,因此不应使用Regex来解析它。 – 2012-03-03 09:55:11

它真的需要“纯文本验证”吗?

阅读你的问题,似乎你只是想删除空值的链接。

如果是后者,你可以做这样的事情:

$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()); 

更多信息
$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 
    } 

}