使用简单的html dom获取网站的语言

时间:2015-01-21 02:31:42

标签: php simple-html-dom detect lang

我正在使用PHP构建搜索引擎和webcrawler,我想检测一个网站的语言,我将如何通过以下方式检测页面的语言:

  1. 检查https://twitter.com/?lang=jap的网址
    如果没有设置那么我想:
  2. 检查网址https://www.google.co.jp/
  3. 如果我仍然找不到任何东西,那么我会将默认设置为英语

    我到目前为止用于抓取页面的代码是:

    function crawl($url){
                $html = file_get_html($url);
                if($html && is_object($html) && isset($html->nodes)){
                    $weblinks[]=$url;
                    foreach($html->find('a') as $element) {
                        global $weblinks;
                        $link = $element->href;
                        $base_url = parse_url($url, PHP_URL_HOST);
                        if(substr($link,0,7)=="http://"){
                            $link = $link;
                        }else if(substr($link,0,8)=="https://"){
                            $link = $link;
                        }else if(substr($link,0,2)=="//"){
                            $link = substr($link, 2);
                        }else if(substr($link,0,1)=="#"){
                            $link = $html;
                        }else if(substr($link,0,7)=="mailto:"){
                            $link = "";
                        }else if(substr($link,0,11)=="javascript:"){
                            $link = "";
                        }else{
                            if(substr($link, 0, 1) != "/"){
                                $link = $base_url."/".$link;
                            }else{
                                $link = $base_url . $link;
                            }
                        }
                        if(substr($link, 0, 7) != "http://" && substr($link, 0, 8) != "https://" && $link != ""){
                            if(substr($url, 0, 8) == "https://"){
                                $link = "https://".$link;
                            }else{
                                $link = "http://".$link;
                            }
                        }
                        if(!in_array($link, $weblinks)){
                            $weblinks[]=$link;
                        }
                    }
                    $html->clear();
                }else{
    
                }
            }
            function info($weblinks){
                foreach($weblinks as $link) {
                    $linkhtml = file_get_html("$link");
                    if($linkhtml && is_object($linkhtml) && isset($linkhtml->nodes)){
    
                        $titleraw = $linkhtml->find('title',0);
                        $title = $titleraw->innertext;
                        $des = $linkhtml->find("meta[name='description']",0)->content;
    
    
    //detect language here
    
                        echo "<tr><td>".$title."</td><td>".$link."</td><td>".$des."</td></tr>";
                        $sql = mysql_query("INSERT into web once");
                        $title = "";
                        $des = "";
                        $linkhtml->clear();
                    }
                }
    
            } 
    

1 个答案:

答案 0 :(得分:1)

?lang=获取语言:

$url = 'www.domain.org?lang=IT';
$url_parts = parse_url($url);
$lang = parse_str($url_parts['lang']);

然后,您应该使用switch / case语句和您支持的语言列表对此进行验证,如下所示:

switch ($lang) {
case 'EN':
//language is English
break;
case 'IT':
//language is Italian
break;
case 'FR':
//language is French
break;
default:
//?lang query was empty, or contained an unsupported language
$lang = FALSE;
} //end switch

之后,您可以使用此逻辑来确定是否需要检查语言的URL:

if ($lang == FALSE) {
//code to determine language from TLD
}

希望这有助于您入门,虽然这是一个很大的蠕虫,你正在开放。除了您提到的内容之外,您还需要检查其他一些内容,以确定网站的语言。其中一个是语言元标记,它是这样的:<meta name="language" content="english">并且位于网页的头部,但并非所有网站都使用它。

某些多语言网站(如我的网站)使用的子域名为http://it.website.comhttp://fr.website.com

其他人使用与?lang=不同的查询字符串。因此,您需要进行大量研究以涵盖所有基础。