Frage

Ich versuche, eine Funktion zu schreiben, nur die Benutzer-Profil-ID oder Benutzername von Facebook zu bekommen. Sie treten dort URL in eine Form, dann versuche ich herauszufinden, ob es eine Facebook-Profilseite oder andere Seite ist. Das Problem ist, dass, wenn sie eine App-Seite oder andere Seite eingeben, die eine Sub-Domain hat, würde Ich mag diese Anforderung ignorieren.

Im Moment habe ich:

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

Dies funktioniert, wenn $author_url hat „id =“ dann als Profil-ID verwenden, wenn nicht, dann muss es so verwenden Sie einen Benutzernamen oder Seitenname sein, dass statt. Ich brauche eine weitere Überprüfung ausgeführt, dass, wenn die URL facebook enthält, aber ist eine Sub-Domain ignorieren. Ich glaube das kann ich in der ersten preg_match preg_match("/facebook/i",$author_url)

Danke!

War es hilfreich?

Lösung

Um Subdomains zu ignorieren facebook Sie können sicherstellen, dass

$parse_author_url['host']

ist facebook.com.

Wenn sein etwas anderes wie login.facebook.com oder apps.facebook.com Sie brauchen nicht fortgesetzt werden.

Alternativ können Sie auch sicherstellen, dass die URL mit http://facebook.com beginnt wie:

if(preg_match("@(?:http://)?facebook@i",$author_url)){

Andere Tipps

Dies ist keine direkte Lösung für das, was Sie fragen aber die Teile sind hier zu tun, was Sie tun müssen.

Ich fand, dass eine Sub-Domain in einer Ausgabe führte mit parse_url . Und zwar zurück es ein Array mit nur $ result [ 'path'] und nicht 'Host' oder 'Schema' .

hier Meine Theorie ist, wenn es keine 'Host' oder 'Schema' Ergebnisse parse_url und es hat Domänensuffixsuchliste (.ext) in der Kette, es ist eine Sub-Domain.

Hier ist der Code: (Das $ src ist ein url Ich musste die relative src von Subdomains aussortieren):

$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'];

}

Könnte durch Parsen der Sub-Domain == true Strings vor dem ersten ‚/‘ und Prüfung gegen Charaktere mit einem RegEx eine weitere Bestätigung schreiben.

Hope, das hilft einige Leute aus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top