проверить поддомен в parse_url - PullRequest
       39

проверить поддомен в parse_url

0 голосов
/ 17 сентября 2010

Я пытаюсь написать функцию, чтобы просто получить идентификатор профиля пользователя или имя пользователя из Facebook.Они вводят там URL в форму, тогда я пытаюсь выяснить, это страница профиля Facebook или другая страница.Проблема в том, что если они заходят на страницу приложения или другую страницу с поддоменом, я бы хотел игнорировать этот запрос.

Прямо сейчас у меня есть:

    $author_url = http://facebook.com/profile?id=12345;
            if(preg_match("/facebook/i",$author_url)){
            $parse_author_url = (parse_url($author_url));
            $parse_author_url_q = $parse_author_url['query'];
                if(preg_match('/id[=]([0-9]*)/', $parse_author_url_q, $match)){
                    $fb_id = "/".$match[1];}
                else{ $fb_id = $parse_author_url['path'];
                }
            $grav_url= "http://graph.facebook.com".$fb_id."/picture?type=square";
}
echo $gav_url;

Это работает, если $author_url имеет "id =", тогда используйте его как идентификатор профиля, если нет, то это должно быть имя пользователя или имя страницытак что используйте это вместо этого.Мне нужно еще раз проверить, что если URL содержит facebook, но это поддомен, игнорируйте его.Я верю, что могу сделать это в первом preg_match preg_match("/facebook/i",$author_url)

Спасибо!

Ответы [ 2 ]

1 голос
/ 17 сентября 2010

Чтобы игнорировать субдомены facebook, вы можете убедиться, что

$parse_author_url['host']

равно facebook.com.

Если это что-то еще, например login.facebook.com или apps.facebook.com, вам не нужно продолжать.

В качестве альтернативы вы также можете убедиться, что URL начинается с http://facebook.com как:

if(preg_match("@(?:http://)?facebook@i",$author_url)){
0 голосов
/ 27 июня 2013

Это не прямое решение для того, что вы просили, но части здесь для того, чтобы сделать то, что вам нужно.

Я обнаружил, что поддомен привел к проблеме с parse_url .А именно, он возвратил массив только с $ result ['path'] и без 'host' или 'схема' .

Моя теория здесь, если нет 'хост' или 'схема' является результатом parse_url и имеет суффикс домена (.ext) в строке, это поддомен.

Вот код: ($ src - это URL, который я должен был отсортировать относительный src из поддоменов):

$srcA = parse_url( $src );
//..if no scheme or host test if subdomain.
if( !$srcA['scheme'] && !$srcA['host'] ){
    //..this string / array is set elsewhere but for this example I will put it here
    $tld = "AC,AD,AE,AERO,AF,AG,AI,AL,AM,AN,AO,AQ,AR,ARPA,AS,ASIA,AT,AU,AW,AX,AZ,BA,BB,BD,BE,BF,BG,BH,BI,BIZ,BJ,BM,BN,BO,BR,BS,BT,BV,BW,BY,BZ,CA,CAT,CC,CD,CF,CG,CH,CI,CK,CL,CM,CN,CO,COM,COOP,CR,CU,CV,CW,CX,CY,CZ,DE,DJ,DK,DM,DO,DZ,EC,EDU,EE,EG,ER,ES,ET,EU,FI,FJ,FK,FM,FO,FR,GA,GB,GD,GE,GF,GG,GH,GI,GL,GM,GN,GOV,GP,GQ,GR,GS,GT,GU,GW,GY,HK,HM,HN,HR,HT,HU,ID,IE,IL,IM,IN,INFO,INT,IO,IQ,IR,IS,IT,JE,JM,JO,JOBS,JP,KE,KG,KH,KI,KM,KN,KP,KR,KW,KY,KZ,LA,LB,LC,LI,LK,LR,LS,LT,LU,LV,LY,MA,MC,MD,ME,MG,MH,MIL,MK,ML,MM,MN,MO,MOBI,MP,MQ,MR,MS,MT,MU,MUSEUM,MV,MW,MX,MY,MZ,NA,NAME,NC,NE,NET,NF,NG,NI,NL,NO,NP,NR,NU,NZ,OM,ORG,PA,PE,PF,PG,PH,PK,PL,PM,PN,POST,PR,PRO,PS,PT,PW,PY,QA,RE,RO,RS,RU,RW,SA,SB,SC,SD,SE,SG,SH,SI,SJ,SK,SL,SM,SN,SO,SR,ST,SU,SV,SX,SY,SZ,TC,TD,TEL,TF,TG,TH,TJ,TK,TL,TM,TN,TO,TP,TR,TRAVEL,TT,TV,TW,TZ,UA,UG,UK,US,UY,UZ,VA,VC,VE,VG,VI,VN,VU,WF,WS,XXX,YE,YT,ZA,ZM,ZW";

    $tldA = explode( ',' , strtolower( $tld ) );

    $isSubdomain = false;
    foreach( $tldA as $tld ){
        if( strstr( $src , '.'.$tld)!=false){
            $isSubdomain = true;
            break;
        }            
    }
    //..prefixing with the $host if it is not a subdomain.
    $src = $isSubdomain ? $src : $src = $host . '/' . $srcA['path'];

}

Может написать дополнительное подтверждение, проанализировав строки поддомен == true перед первым '/' и протестировавпротив персонажей с RegEx.

Надеюсь, это поможет некоторым людям.

...