2010-12-20 26 views
14

मैं सोच रहा हूँ क्यों इस कोड काम नहीं कर रहा:जाँच हो रही है स्ट्रिंग "http: //" शामिल करता है, तो

// check to see if string contains "HTTP://" in front 

if(strpos($URL, "http://")) $URL = $URL; 
else $URL = "http://$URL"; 

यह मिलता है, तो वह स्ट्रिंग शामिल नहीं है "http: //" अंतिम स्ट्रिंग "HTTP: // HTTP: //foo.foo" है यदि यह सामने "http: //" का सामना करता है।

+0

हैं कि वास्तविक जड़ है, तो आप भी 'stripos' का उपयोग करना चाहें, तो यह अपरकेस HTTP पाता है:' साथ भी //, अगर (स्ट्रिप्स ($ यूआरएल, "http: //") === 0) ' – mario

+0

आपको मिल सकता है [' s ($ str) -> startWithIgnoreCase ('http: //') '] (https: // github ।com/joy-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str.php # L81) उपयोगी है, जैसा कि [इस स्टैंडअलोन लाइब्रेरी] में पाया गया है (https://github.com/delight-im/PHP-Str)। – caw

उत्तर

34

क्योंकि यह उस स्ट्रिंग के लिए 0 लौटा रहा है, जो गलत का मूल्यांकन करता है। स्ट्रिंग्स शून्य इंडेक्स किए गए और इस तरह अगर के रूप में http:// स्ट्रिंग की शुरुआत में पाया जाता है, स्थिति 0 1.

आप !== का उपयोग कर झूठी बूलियन का कड़ाई से असमानता के लिए यह तुलना करने की आवश्यकता नहीं है,:

if(strpos($URL, "http://") !== false) 
+7

शायद 'if (substr ($ url, 0, 7) == 'http: //') 'तेज़ी से हो सकता है। लेकिन यह वह जगह नहीं है जहां हमें किसी भी अनुकूलन को लागू करना चाहिए ;-) – zerkms

+0

@zerkms: वाह, आप सही हैं। और तुम ठीक हो : पी – BoltClock

+0

@ बोल्टक्लॉक: क्या आपने इसे देखा? आदर्श पर परिणामों को देखने के लिए उत्सुक, उदाहरण के लिए ;-) – zerkms

9

@ बोल्टक्लॉक की विधि काम करेगी।

वैकल्पिक रूप से, अगर आपके स्ट्रिंग एक यूआरएल आप parse_url() उपयोग कर सकते हैं, जो एक साहचर्य सरणी में URL में घटक वापस आ जाएगी, इसलिए की तरह है:

print_r(parse_url("http://www.google.com.au/")); 


Array 
(
    [scheme] => http 
    [host] => www.google.com.au 
    [path] =>/
) 

scheme क्या आप के बाद कर रहे हैं है। in_array के साथ के साथ http यूआरएल स्ट्रिंग के भीतर मौजूद है या नहीं, यह निर्धारित करने के लिए आप parse_url() का उपयोग कर सकते हैं।

$strUrl  = "http://www.google.com?query_string=10#fragment"; 
$arrParsedUrl = parse_url($strUrl); 
if (!empty($arrParsedUrl['scheme'])) 
{ 
    // Contains http:// schema 
    if ($arrParsedUrl['scheme'] === "http") 
    { 

    } 
    // Contains https:// schema 
    else if ($arrParsedUrl['scheme'] === "https") 
    { 

    } 
} 
// Don't contains http:// or https:// 
else 
{ 

} 

संपादित करें:

आप $url["scheme"]=="http" उपयोग कर सकते हैं @mario in_array() के बजाय सुझाव के रूप में, यह यह करने का एक बेहतर तरीका होगा: डी

+2

हम्म, 'in_array() 'के बजाय आप' ($ url [" plan "] ==" http ") का उपयोग कर सकते हैं। – mario

+0

मैंने अभी अजीब किनारे के मामलों जैसे 'parse_url (" ftp: // http? Http # http ")' – mario

+0

@ मारियो मेला पॉइंट के लिए इसका उल्लेख किया है। मूल उत्तर संपादित किया गया :) –

0

आप substr_compare() [PHP Docs] उपयोग कर सकते हैं।

फ़ंक्शन लौटने के बारे में सावधान रहें। यदि तार मिलान करते हैं, तो यह 0 अन्य रिटर्न मानों के लिए आप PHP दस्तावेज़ों को देख सकते हैं। केस-सेंसिटिव तारों की जांच करने के लिए एक पैरामीटर भी है। यदि आप इसे सत्य निर्दिष्ट करते हैं तो यह ऊपरी-केस अक्षरों की जांच करेगा।

तो आप बस अपने समस्या में इस प्रकार लिख सकते हैं:

if((substr_compare($URL,"http://",0,7)) === 0) $URL = $URL; 
else $URL = "http://$URL"; 
1

आप की जाँच की है स्ट्रिंग "http: //" अगर या नहीं

कोड नीचे पूरी तरह से काम कर रहा है।

<?php 
$URL = 'http://google.com'; 
$weblink = $URL; 
    if(strpos($weblink, "http://") !== false){ } 
    else { $weblink = "http://".$weblink; } 
?> 
    <a class="weblink" <?php if($weblink != 'http://'){ ?> href="<?php echo $weblink; ?>"<?php } ?> target="_blank">Buy Now</a> 

लोगों का आनंद लें ...

4

आप https:// के बारे में याद करने की जरूरत है। इस प्रयास करें:

private function http_check($url) { 
    $return = $url; 
    if ((!(substr($url, 0, 7) == 'http://')) && (!(substr($url, 0, 8) == 'https://'))) { 
     $return = 'http://' . $url; 
    } 
    return $return; 
} 
-2

एक पंक्ति समाधान:

$sURL = 'http://'.str_ireplace('http://','',$sURL); 
+0

आपको _check_, _create_ URL नहीं करना है। – czachor

संबंधित मुद्दे