2010-09-17 3 views
0

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

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

$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 имеет «идентификатор =», а затем использовать его в качестве идентификатора профиля, если нет, то это должно быть имя пользователя или страницу, так что используйте это вместо этого. Мне нужно запустить еще одну проверку, что если URL-адрес содержит фейсбук, но является субдоменом, игнорируйте его. Я верю, что могу сделать это в первом preg_match preg_match("/facebook/i",$author_url)

Спасибо!

ответ

1

Игнорирование facebook поддоменов вы можете гарантировать, что

$parse_author_url['host'] 

является facebook.com.

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

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

if(preg_match("@(?:http://)[email protected]",$author_url)){ 
+0

Humm ... Я попробовал 'if (strtolower ($ parse_author_url ['host']) ==" facebook.com ")', но он в Интернете понравился "facebook.com", а не "www.facebook.com" Я также попробовал preg_match, но он принял поддомены как действительные. Спасибо за помощь. – BandonRandon

+0

Вы можете сделать опцию 'www.' как:' if (preg_match ("@ (?: Http: //)? (?: Www \.)? Facebook @ i", $ author_url)) {' – codaddict

+0

к сожалению что позволяет «apps.facebook.com» – BandonRandon

0

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

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

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

Вот код: (за $ ЦСИ является 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']; 

} 

мог бы написать еще одно подтверждение, анализируя субдомен == истинные строки перед тем первый «/» и тестирование против символов с помощью RegEx.

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

Смежные вопросы