سؤال

أحاول كتابة وظيفة للحصول على معرف ملف تعريف المستخدمين أو اسم المستخدم من 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)

شكرًا!

هل كانت مفيدة؟

المحلول

لتجاهل النطاقات الفرعية على 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. وهي إعادة صفيف مع فقط نتيجة $ ['path' و لا "مضيف" أو "مخطط".

نظريتي هنا هي إذا لم يكن هناك "مضيف" أو "مخطط" نتائج من parse_url وله لاحقة المجال (.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'];

}

يمكن أن تكتب تأكيدًا إضافيًا عن طريق تحليل النطاق الفرعي == الأوتار الحقيقية قبل الأول/"واختبار ضد الشخصيات مع regex.

نأمل أن يساعد هذا بعض الناس.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top