中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用PHP獲取一個頁面上的鏈接信息

發布時間:2020-07-23 19:20:17 來源:網絡 閱讀:1025 作者:gutaotao1989 欄目:web開發

開發中我們可能會獲取某個頁面或是一段內容中的鏈接信息,下面我分享一個我寫的函數給大家,希望能幫到大家。


函數功能:

1、獲取一段內容中鏈接信息;

2、獲取一個URL中鏈接信息;

3、剔除錨鏈等無效的鏈接

4、獲取當前域下的鏈接信息

5、獲取他域下的鏈接信息

6、保留鏈接的文本信息

代碼:

/**
 * +----------------------------------------------------------
 * 功能:獲取一個網頁或一段內容里面的鏈接信息
 * +----------------------------------------------------------
 * @param string $html    要獲取鏈接的內容或網址
 * @param string $isExclude  是否過濾無效的鏈接,如"","#","javascript:;","javascript:void(0);" 。默認過濾
 * @param string $isKeepLinkText 是否保留鏈接的文字。默認保留,保留與不保留鏈接數可能不同
 * @param string $linkType    取得鏈接的類型,all所有的鏈接,inner 本域下的鏈接, out 外域的鏈接信息。默認 是取得所有鏈接
 * +----------------------------------------------------------
 * @return array
 * +----------------------------------------------------------
 */
function getLinks($html,$isExclude=true,$isKeepLinkText=true,$linkType='all'){
    if(empty($html)) return false;
    set_time_limit(0);//防止超時
    $removes=array('','#','javascript:;','javascript:void(0);','javascript:void(0)');//排除錨鏈之類的
    $html = substr(strtolower($html),0,4)=="http"?file_get_contents($html):$html;//要處理的內容
    //提取鏈接信息
    $pattern = '/<a(?:.*?)href="(((?:http(?:s?):\/\/)?([^\"\/]+))?(?:[^\"]*))"(?:[^>]*?)>([^<]*?)<\/a>/i';
    preg_match_all($pattern, $html, $_links);
    if($isKeepLinkText){
        foreach ($_links[1] as $key => $href) {
            $links[$_links[4][$key]]=$href;
        }
    }else{
        $links=$_links[4];
    }
    unset($_links);
                    
    foreach ($links as $text => $href) {
        //移除無效的鏈接
        if($isExclude&&in_array($href, $removes)) {           
            unset($links[$text]);
        }
        if($linkType!='all'){
            $host=parse_url($href); 
            $host=isset($host['host'])?$host['host']:'';
            if($linkType=='inner'){//本域鏈接
                if(substr($href,0,1)!="/"&&strtolower($host)!=strtolower($_SERVER['SERVER_NAME'])) {
                    unset($links[$text]);
                }
            }elseif($linkType=='out'){//他域鏈接
                if(substr($href,0,1)=="/"||strtolower($host)==strtolower($_SERVER['SERVER_NAME'])) {
                    unset($links[$text]);
                }
            }
        }
    }
    return $links;
}

使用方法:

$links=getLinks("http://www.sina.com.cn");
               
//或
 $links=getLinks("http://www.sina.com.cn",1,0,"out");
               
 //或
 $links=getLinks("這里是一段要提取鏈接信息的內容");

特別說明:

1、上面的函數用到了file_get_contents ,獲取內容可能會失敗,你可以自行改成curl;

2、提取鏈接用了正則,效率可能低。


當然你也看一看使用下面的函數,當要提取的內容網址的時候不使用正則來提取鏈接信息:

代碼:

/**
 * +----------------------------------------------------------
 * 功能:獲取一個網頁或一段內容里面的鏈接信息
 * +----------------------------------------------------------
 * @param string $html    要獲取鏈接的內容或網址
 * @param string $isExclude  是否過濾無效的鏈接,如"","#","javascript:;","javascript:void(0);" 。默認過濾
 * @param string $isKeepLinkText 是否保留鏈接的文字。默認保留,保留與不保留鏈接數可能不同
 * @param string $linkType    取得鏈接的類型,all所有的鏈接,inner 本域下的鏈接, out 外域的鏈接信息。默認 是取得所有鏈接
 * +----------------------------------------------------------
 * @return array
 * +----------------------------------------------------------
 */
function getLinks($html,$isExclude=true,$isKeepLinkText=true,$linkType='all'){
    if(empty($html)) return false;
    set_time_limit(0);
    $removes=array('','#','javascript:;','javascript:void(0);','javascript:void(0)');//排除錨鏈之類的
    $isLink=substr(strtolower($html),0,4)=="http"?1:0;//是否是鏈接
    $html = $isLink?file_get_contents($html):$html;
    if($isLink){
        $dom = new DOMDocument();
        @$dom->loadHTML($html);
        $xpath = new DOMXPath($dom);
        unset($dom);
        $hrefs = $xpath->evaluate("/html/body//a");//獲取a節點
        $length=$hrefs->length;//獲取鏈接數
        $links=array();//網頁上的鏈接
        for ($i = 0; $i < $length; $i++) {
            $href = trim($hrefs->item($i)->getAttribute('href'));
            $text=trim($hrefs->item($i)->textContent);
            $links[$text]=$href;
        }
    }else{
        $pattern = '/<a(?:.*?)href="(((?:http(?:s?):\/\/)?([^\"\/]+))?(?:[^\"]*))"(?:[^>]*?)>([^<]*?)<\/a>/i';
        preg_match_all($pattern, $html, $_links);
        if($isKeepLinkText){
            foreach ($_links[2] as $key => $href) {
                $links[$_links[4][$key]]=$href;
            }
        }else{
            $links=$_links[4];
        }
        unset($_links);
    }
    foreach ($links as $text => $href) {
        //移除無效的鏈接
        if($isExclude&&in_array($href, $removes)) {
            unset($links[$text]);
        }
        if($linkType!='all'){
            $host=parse_url($href); 
            $host=isset($host['host'])?$host['host']:'';
            if($linkType=='inner'){//本域鏈接
                if(substr($href,0,1)!="/"&&strtolower($host)!=strtolower($_SERVER['SERVER_NAME'])) {
                    unset($links[$text]);
                }
            }elseif($linkType=='out'){//他域鏈接
                if(substr($href,0,1)=="/"||strtolower($host)==strtolower($_SERVER['SERVER_NAME'])) {
                    unset($links[$text]);
                }
            }
        }
    }
    return $links;
}

使用方法與上面一致

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

郑州市| 武川县| 靖西县| 宁国市| 琼结县| 怀安县| 阳原县| 阳城县| 深州市| 大田县| 新干县| 泰来县| 昌江| 肇庆市| 盖州市| 宝山区| 武乡县| 同德县| 谢通门县| 泸州市| 沁水县| 马鞍山市| 壶关县| 濮阳县| 平塘县| 太仆寺旗| 电白县| 杂多县| 平山县| 黄冈市| 加查县| 洛川县| 麟游县| 特克斯县| 河北区| 交口县| 东港市| 公主岭市| 阿拉善左旗| 连云港市| 郓城县|