Pregunta

Estoy intentando escribir una función que acaba de obtener el identificador de perfil de los usuarios o nombre de usuario de Facebook. Entran allí URL en un formulario y luego estoy tratando de averiguar si se trata de una página de perfil de Facebook o otra página. El problema es que si entran en una página de aplicación u otra página que tiene un subdominio me gustaría hacer caso omiso de esa petición.

Ahora mismo tengo:

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

Este funciona si tiene $author_url "id =" y luego usar eso como el identificador de perfil si no, entonces debe ser un nombre de usuario o el nombre de la página por lo utilice en su lugar. Necesito ejecutar una comprobación más que si la URL contiene facebook pero es un subdominio ignoran. Me creer que puedo hacer que en el primer preg_match preg_match("/facebook/i",$author_url)

Gracias!

¿Fue útil?

Solución

Para ignorar facebook subdominios puede asegurarse de que

$parse_author_url['host']

es facebook.com.

Si su nada que se le parezca login.facebook.com o apps.facebook.com que no tiene por qué proceder.

Como alternativa, también puede asegurarse de que la URL comienza con http://facebook.com como:

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

Otros consejos

Esto no es una solución directa para lo que pedían, pero las piezas están aquí para hacer lo que tiene que hacer.

Me encontró que un subdominio dio lugar a un problema con parse_url . Es decir, que devuelve una matriz con un solo $ resultado [ 'ruta'] y sin 'huésped' o 'esquema' .

Mi teoría aquí es que si no hay un 'huésped' o 'esquema' Resultados de parse_url y tiene sufijo de dominio (ext) en la cadena, es un subdominio.

Este es el código: (El $ src es una URL que tenía que resolver el src relativa de subdominios):

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

}

Podría escribir una confirmación adicional mediante el análisis del subdominio == cuerdas verdaderas antes de la primera '/' y prueba contra personajes con una expresión regular.

Espero que esto ayude a algunas personas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top