PHP通过URL解析特定站点上的导航链接

时间:2013-09-05 16:28:35

标签: php html simple-html-dom

我打算从任何给定的网址获取菜单元素(链接)。这意味着代码应该过滤网站上存在的所有其他链接的菜单链接(将用于在特定网站内导航的链接)。

我一直计划使用 simplehtmldom ,因为之前我用它来解析内容。

问题:

  1. 菜单链接容器的格式可以不同:ul li,table或div中的简单标签。
  2. 菜单链接可以是图片(代码应使用alt或title标签)
  3. 我的问题:

    1. 是否有可能以某种方式分析链接内容以确保它们是链接? 等等。如果href具有相同的域名href="http://domain.com/link"或是本地href="/link"
    2. 如何排除语言切换按钮,因为它们通常是domain.com/ENen.doamin.com?它们与真实的菜单导航链接非常相​​似。
    3. 我希望你明白这一点。

      最佳, 马尔蒂阿赫

1 个答案:

答案 0 :(得分:0)

此正则表达式测试给定字符串是否为url:

^(http[s]?://|ftp://)?(www\.)?[a-zA-Z0-9-\.]+\.(com|org|net|mil|edu|ca|co.uk|com.au|gov|br)$

你可以实现一些preg_match测试......希望它有所帮助

REF:

http://php.net/manual/en/function.preg-match.php

[编辑]

变量$ thePath应该为您带来当前网站的网址:

$theProtocol = (strpos(strtolower($_SERVER['SERVER_PROTOCOL']), 'https') === false) ? 'http' : 'https';
$thePath = $theProtocol.'://'.$_SERVER['SERVER_NAME'];

因此,您可以将匹配的字符串与变量内容进行比较,然后确定您是否正在操作内部链接。

这应该有用:

function str_starts_with($haystack, $needle, $caseSensitive = true){
        if($caseSensitive)
            return strpos($haystack, $needle) === 0;
        else
            return stripos($haystack, $needle) === 0;
    }