Проверить поддомен в parse_url
Я пытаюсь написать функцию, чтобы просто получить идентификатор профиля пользователя или имя пользователя из 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 ответа
Чтобы игнорировать поддомен 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)){
Это не прямое решение для того, что вы просили, но части здесь, чтобы сделать то, что вам нужно сделать.
Я обнаружил, что поддомен привел к проблеме с parse_url. А именно, он возвратил массив только с $ result ['path'] и без 'host' или 'схема'.
Моя теория заключается в том, что если в результате parse_url нет результатов 'host' или 'схема' и в строке есть суффикс домена (.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.
Надеюсь, это поможет некоторым людям.