【问题标题】:validity of facebook page whther it really exists and its url structurefacebook页面是否真实存在及其url结构的有效性
【发布时间】:2014-10-31 21:13:04
【问题描述】:

我花了几个小时来验证 Facebook PAGES。我找到并阅读了很多文章/帖子,但没有找到符合我要求的内容。我想将用户输入的 url ($rawurl) 转换为我想要的格式 ($goodurl),在谷歌搜索时,我发现 regex 是这样做的方法,但它非常复杂且难以理解并且需要帮助。

用户可以按照自己喜欢的方式输入网址 示例:

http://facebook.com/WillSmith, 
https://facebook.com/WillSmith, 
http://www.facebook.com/WillSmith, 
https://www.facebook.com/WillSmith, 
www.facebook.com/WillSmith 
or just facebook.com/WillSmith 

或任何其他方式。不仅如此,除了虚荣的 url 格式,facebook 页面还带有其他格式,如 facebook.com/pages/usernames/somenumbers。诸如 en-gb.facebook.com 之类的子域使事情变得更加困难。所以在谷歌搜索更多之后,我找到了一个正则表达式http[s]?://(www|[a-zA-Z]{2}-[a-zA-Z]{2})\.facebook\.com/(pages/[a-zA-Z0-9\.-]+/[0-9]+|[a-zA-Z0-9\.-]+)[/]?$,但不确定它是否能满足上述所有条件。

帮助我的需要: 1.我需要的标准格式是https://www.facebook.com/WillSmith 2. 我还需要检查它是否是一个有效的 URL。例如,上面的 url 是有效的,如果你看到这个 url https://www.facebook.com/WillSmith555,它符合有效标准,但 Facebook 上没有这样的页面。它显示“抱歉,此页面不可用。您点击的链接可能已损坏,或者该页面可能已被删除”,并带有损坏的竖起大拇指图片。

检查这两个条件后,我需要在php文件中回显用户输入的url在进行正则表达式转换后是否有效。

请帮忙。

【问题讨论】:

    标签: php regex facebook facebook-page


    【解决方案1】:

    你可以在 facebook 上做一个 head only 请求:

    <?php
    
        function header_req( $url )
        {
            $channel = curl_init();
            curl_setopt($channel, CURLOPT_URL, $url);
            curl_setopt($channel, CURLOPT_CONNECTTIMEOUT, 10);
            curl_setopt($channel, CURLOPT_TIMEOUT, 10);
            curl_setopt($channel, CURLOPT_HEADER, true);
            curl_setopt($channel, CURLOPT_NOBODY, true);
            curl_setopt($channel, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($channel, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; rv:2.2) Gecko/20110201');
            curl_setopt($channel, CURLOPT_FOLLOWLOCATION, true);
            curl_setopt($channel, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
            curl_setopt($channel, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($channel, CURLOPT_SSL_VERIFYHOST, FALSE); 
            curl_exec($channel);
            $httpCode = curl_getinfo( $channel, CURLINFO_HTTP_CODE );
            curl_close($channel);
            return $httpCode;
        }
    
        $url = "https://www.facebook.com/WillSmith";
    
        //lets check the url for facebook as host:
    
    
        // 1 add http if not found in URL
        if ( stripos( $url , "http") !== 0)
            $url = "http://" . $url;
    
    
        // 2 get facebook.com from URL
        $host = parse_url( $url, PHP_URL_HOST );
    
        // 3 if host is indeed facebook.com then continue
        if ( stripos( $host , "facebook.com" ) )
        {
            $response = header_req($url);
    
            if ( $response === 200 || $response === 302 )
                echo "Page Found";
            else
                echo "Page Not Found";
        }
    
    ?>
    

    这样的优点:

    1. 它只会获取大约 1KB - 5 KB 的页面标题。

    2. 不使用正则表达式。

    3. 无论模式是什么,所有页面都经过验证:)

    【讨论】:

    • 感谢您的回复。我没有在函数中看到任何提及 facebook.com 域,所以我假设该函数也会将 google.com 声明为找到的页面。仅当函数找到存在的有效 facebook 页面时,我才想要 Page Found 回显,而不管 url 是如何编写的。
    • @Sabha 您可以检查 URL 是否包含特定字符串,例如 Facebook.com :)
    • @Sabha 检查编辑
    【解决方案2】:

    关于正则表达式:

    • 您需要使用反斜杠转义斜杠
    • 进行一些修改以匹配您的所有示例

    您的正则表达式,已修改:

    ^(http[s]?:\/\/)?((www|[a-zA-Z]{2}-[a-zA-Z]{2})\.)?facebook\.com\/(pages\/[a-zA-Z0-9\.-]+\/[0-9]+|[a-zA-Z0-9\.-]+)\b[\/]?$
    

    演示:http://regex101.com/r/lN1tN6/1

    【讨论】:

    • 不知道页面是否存在的唯一方法是尝试打开它并查看是否出现错误...(Ancient geek's answer中的脚本)
    • 谢谢你,狡猾。我试图理解这个表达。如果页面存在于 facebook 上,有没有办法在表达式中找到?此外,如果有人输入原始网址,我如何将其转换为有效网址并将该网址放入 $goodurl 变量中,如问题中所述?谢谢。
    • 问题是,url 可能是有效的。我猜需要检查 innerhtml 中的字符串“对不起,此页面不可用”,不知道如何检查。
    • 在使用这个表达式失去焦点时,有没有办法在同一个文本框中以特定格式替换输入的 url?或者只是用正确的格式更改变量值?例如,我需要我的网址以 https://www 开头。然后是页面名称,删除“?”之后的所有垃圾字符符号。 1..facebook.com/username?ref=ts&fref=ts 将变为facebook.com/username 2..facebook.com/username 将变为facebook.com/username 3..facebook.com/pages/username/123456789?ref=br_rs 将变为facebook.com/pages/username/123456789
    • 类似于
    猜你喜欢
    • 2019-03-18
    • 1970-01-01
    • 2021-06-01
    • 2017-12-05
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 2011-12-21
    相关资源
    最近更新 更多