2011-02-01 15 views
17

क्यों इस स्टैंडअलोन कोड काम नहीं कर रहा:सरल PHP स्ट्रॉप्स फ़ंक्शन काम नहीं कर रहा है, क्यों?

$link = 'https://google.com'; 

$unacceptables = array('https:','.doc','.pdf', '.jpg', '.jpeg', '.gif', '.bmp', '.png'); 

foreach ($unacceptables as $unacceptable) 
{ 
     if (strpos($link, $unacceptable) === true) { 

      echo 'Unacceptable Found<br />'; 

     } 
     else { 

      echo 'Acceptable!<br />'; 

     } 
} 

यह स्वीकार्य भले ही https $ लिंक चर के भीतर निहित है हर बार मुद्रण है।

उत्तर

51

संदेह होने पर, the docs पढ़ें:

[strpos] रिटर्न भूसे के ढेर में सुई स्ट्रिंग की पहली आवृत्ति के संख्यात्मक स्थिति।

तो आप की तरह कुछ और कोशिश करना चाहते हैं: क्योंकि अन्यथा strpos एक नंबर लौटने

// ... 
if (strpos($link, $unacceptable) !== false) { 

, और आप एक बूलियन true के लिए देख रहे हैं।

+1

पसंद आया haha ​​मुझे पंच को हराया –

7

strpos() कोई मिलान मिलने पर सत्य वापस नहीं आता है, यह पहली मिलान स्ट्रिंग की स्थिति देता है। वॉचआउट, यदि मैच स्ट्रिंग की शुरुआत है तो यह शून्य की अनुक्रमणिका लौटाएगा जो कि झूठी के बराबर की तुलना करेगा जबतक कि आप === ऑपरेटर का उपयोग नहीं करते।

5

आपकी विफलता स्थिति गलत है।

strpos झूठी लौटाता है यदि नहीं मिलता है, तो आप स्पष्ट रूप से जांच करने की आवश्यकता

if (strpos($link, $unacceptable) !== false) { 
1

strpos हमेशा लौट स्थिति में आप की तरह खोज "httpsL" अपने स्ट्रिंग में ('https://google.com';) तो यह 0 वां स्थान लौटाता है और PHP इसे गलत के रूप में मूल्यांकन करता है।

कृपया यह लिंक देखें: (आप के लिए अपने बहुत उपयोगी आशा): http://php.net/manual/en/function.strpos.php

0
if (strpos($link, $unacceptable)) 
{ 
} else { 
    /* What you want to do when it is false */ 
} 
0

strpos

समारोह बूलियन FALSE वापस आ सकते हैं, लेकिन यह भी एक गैर बूलियन मान जो का मूल्यांकन वापस आ सकते हैं असत्य।

तो मैं इस

if (strpos($link, $unacceptable) !== false) { 
    //Code 
} 
संबंधित मुद्दे