Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/91.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP通过URL解析特定站点上的导航链接_Php_Html_Simple Html Dom - Fatal编程技术网

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

PHP通过URL解析特定站点上的导航链接,php,html,simple-html-dom,Php,Html,Simple Html Dom,Ia am计划从任何给定URL获取菜单元素(链接)。这意味着代码应该从站点上存在的所有其他链接中筛选菜单链接(用于在特定站点内导航的链接) 我一直计划使用simplehtmldom,就像我以前使用它解析内容一样 问题: 菜单链接容器的格式可以不同:ulli、table或div中的简单标记 菜单链接可以是图像(然后代码应使用alt或title标记) 我的问题: 是否有可能以某种方式分析链接内容,以确保它们是链接? 等。如果href具有相同的域名href=”http://domain.com/lin

Ia am计划从任何给定URL获取菜单元素(链接)。这意味着代码应该从站点上存在的所有其他链接中筛选菜单链接(用于在特定站点内导航的链接)

我一直计划使用simplehtmldom,就像我以前使用它解析内容一样

问题:

  • 菜单链接容器的格式可以不同:ulli、table或div中的简单标记
  • 菜单链接可以是图像(然后代码应使用alt或title标记)
  • 我的问题:

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

    最好的,
    Martti

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

    ^(http[s]?://|ftp://)?(www\.)?[a-zA-Z0-9-\.]+\.(com|org|net|mil|edu|ca|co.uk|com.au|gov|br)$
    
    您可以实施一些预匹配测试。。。希望能有帮助

    参考:

    [编辑]

    变量$thePath应为您提供当前站点url:

    $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;
        }
    

    var\u转储(筛选变量('http://example.com,过滤器(验证URL))密码到底是干什么的,汉基?谢谢。但是如果我使用simplehtmldom,那么我通过或href获取内容,因此我已经知道它们都是链接。问题是要找出其中哪些是用于在站点内部导航的链接。我正在使用
    //查找每个($html->find('a')as$element)echo$element->href的所有链接
    '
    查找页面上的所有链接,并
    $parse=parse\u url($url)$scheme=$parse['scheme']$host=$parse['host']
    以获取域和方案。现在我需要一个函数来过滤掉内部链接。我发现了这个。也许你能告诉我是怎么做到的