Question

Je suis en train d'écrire une fonction pour obtenir juste l'identifiant du profil de l'utilisateur ou le nom d'utilisateur de Facebook. Ils y entrent url dans une forme alors je suis en train de comprendre si elle est une page de profil Facebook ou une autre page. Le problème est que si elles entrent dans une page d'application ou une autre page qui a un sous-domaine que je voudrais ignorer cette demande.

En ce moment je:

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

Cela fonctionne si $author_url a « id = » utiliser alors que l'identifiant de profil, sinon il doit être un nom d'utilisateur ou le nom de la page afin utiliser à la place. Je dois courir un plus vérifier que si l'URL contient facebook mais est un sous-domaine de l'ignorer. Je belive je peux le faire dans le premier preg_match preg_match("/facebook/i",$author_url)

Merci!

Était-ce utile?

La solution

Pour ignorer facebook subdomains vous pouvez vous assurer que

$parse_author_url['host']

est facebook.com.

Si son autre chose comme login.facebook.com ou apps.facebook.com vous ne devez pas procéder.

Sinon, vous pouvez également faire en sorte que l'URL commence par http://facebook.com comme:

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

Autres conseils

Ce n'est pas une solution directe pour ce que vous demandez, mais les pièces sont là pour faire ce que vous devez faire.

Je trouve qu'un sous-domaine a donné lieu à un problème avec parse_url . A savoir, il est retourné un tableau avec seulement $ result [ 'path'] et non 'hôte' ou 'système' .

Ma théorie est ici s'il n'y a pas « hôte » ou « système » Résultats de parse_url et il a suffixe de domaine (.ext) dans la chaîne, il est un sous-domaine.

Voici le code: (Le $ src est une url que je devais trier le rapport src de sous-domaines):

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

}

pourrait écrire une nouvelle confirmation par l'analyse du sous-domaine == chaînes vraies avant le premier « / » et tester contre des personnages avec une expression régulière.

Espérons que cela aide certains gens.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top