如何获取从明文转换的超链接的标题和描述?

时间:2013-11-16 14:21:34

标签: php curl

我的应用程序中有一个函数可以将纯文本URL更改为超链接。功能如下。

$rexProtocol = '(https?://)?';
$rexDomain   = '((?:[-a-zA-Z0-9]{1,63}\.)+[-a-zA-Z0-9]{2,63}|(?:[0-9]{1,3}\.){3}[0-9]{1,3})';
$rexPort     = '(:[0-9]{1,5})?';
$rexPath     = '(/[!$-/0-9:;=@_\':;!a-zA-Z\x7f-\xff]*?)?';
$rexQuery    = '(\?[!$-/0-9:;=@_\':;!a-zA-Z\x7f-\xff]+?)?';
$rexFragment = '(#[!$-/0-9:;=@_\':;!a-zA-Z\x7f-\xff]+?)?';

// Solution 1:

    function callback($match)
    {
        // Prepend http:// if no protocol specified
        $completeUrl = $match[1] ? $match[0] : "http://{$match[0]}";
        $html = file_get_contents_curl($completeUrl);

        //parsing begins here:


$doc = new DOMDocument();
        @$doc->loadHTML($html);
        $nodes = $doc->getElementsByTagName('title');

        //get and display what you need:
        $title = $nodes->item(0)->nodeValue;

        $metas = $doc->getElementsByTagName('meta');

        for ($i = 0; $i < $metas->length; $i++)
        {
            $meta = $metas->item($i);
            if($meta->getAttribute('name') == 'description')
                $description = $meta->getAttribute('content');
            if($meta->getAttribute('name') == 'keywords')
                $keywords = $meta->getAttribute('content');
        }
        $posted2 = "<h3>$title</h3><br>".$description."<a href='$completeUrl'>View page</a>";
        $type = "View URL summary";
        return '<a href="' . $completeUrl . '">'
            . $completeUrl . '</a>';
    }

echo $posted2;
$posted = preg_replace_callback("&\\b$rexProtocol$rexDomain$rexPort$rexPath$rexQuery$rexFragment(?=[?.!,;:\"]?(\s|$))&",
    'callback', $posted);

我想要发生的是$posted2包含要检查的URL的标题和说明。但是,当我回显$ posted2时它是空白的,即使我在函数回调中定义它。所以我问是否有一种替代方法我可以使用,以便在评论中找到一个Url时,它会变成一个超链接,标题和描述会被添加到变量$ posted2中。感谢

0 个答案:

没有答案