Http: // कैसे जोड़ें अगर यह URL में मौजूद नहीं है?


110

http://यदि मैं पहले से ही एक प्रोटोकॉल (जैसे http://, https://या ftp://) को शामिल नहीं करता है तो मैं एक URL को कैसे जोड़ सकता हूं ?

उदाहरण:

addhttp("google.com"); // http://google.com
addhttp("www.google.com"); // http://www.google.com
addhttp("google.com"); // http://google.com
addhttp("ftp://google.com"); // ftp://google.com
addhttp("https://google.com"); // https://google.com
addhttp("http://google.com"); // http://google.com
addhttp("rubbish"); // http://rubbish

यदि आप mozilla.orgअकेले थे, तो आपको कैसे पता चलेगा कि यह होना चाहिए http, httpsया ftp?
एंथनी फोर्लोनी

7
@ एंथनी: उनका कहना है कि अगर कोई अन्य प्रोटोकॉल नहीं है तो वह "http: //" जोड़ना चाहते हैं।
०:२०

3
@Anthony लेकिन जब उपयोगकर्ता http के बिना यूआरएल टाइप करता है: // या कुछ भी, क्या आप इसे ftp होने की उम्मीद करते हैं: // या कुछ और?
रियान

जवाबों:


265

@Nickf कोड का एक संशोधित संस्करण:

function addhttp($url) {
    if (!preg_match("~^(?:f|ht)tps?://~i", $url)) {
        $url = "http://" . $url;
    }
    return $url;
}

पहचानता ftp://, ftps://, http://और https://एक मामले असंवेदनशील तरीके से।


5
नीचे Addhttp और Addcheme की तुलना करने के बाद, मैं इस निष्कर्ष पर पहुंचा हूं कि Addcheme प्रदर्शन के मामले में बेहतर है: $url = "www.google.com"; $init = microtime(true); for( $i = 1; $i < 100000; $i++ ) { addScheme( $url ); } echo microtime(true) - $init; echo "<BR>"; $init = microtime(true); for( $i = 1; $i < 100000; $i++ ) { addhttp( $url ); } echo microtime(true) - $init;
लुइस लोबो बोरोबिया

क्या होगा अगर url '//' से शुरू होता है?
होल्डन321

@ Holden321 यह मुझे उस हाथी के बारे में कविता याद दिलाता है जो तैरने पर गया था और मछली के रूप में वापस आया था ताकि आपको हर कीमत और चीजों से रोका जा सके जो आपको चोट पहुंचा सकती हैं। दुनिया में बहुत सारे लोग हैं, और आप जानते हैं, आपके पास यह अविश्वसनीय विचार हैं और जो आपको लगता है कि वह गायब है प्रेरणा है, लेकिन यह सच नहीं है। क्योंकि जिस तरह से हमारे दिमाग तार-तार होते हैं और इंसान के बारे में तथ्य यह है कि हम उन चीजों को करने के लिए डिज़ाइन नहीं हैं जो आरामदायक नहीं हैं।
होमरून

136

लेखन के समय, किसी भी उत्तर ने इसके लिए एक अंतर्निहित फ़ंक्शन का उपयोग नहीं किया:

function addScheme($url, $scheme = 'http://')
{
  return parse_url($url, PHP_URL_SCHEME) === null ?
    $scheme . $url : $url;
}

echo addScheme('google.com'); // "http://google.com"
echo addScheme('https://google.com'); // "https://google.com"

यह सभी देखें: parse_url()


13
यह चयनित उत्तर होना चाहिए - जब भाषा का मूल समर्थन हो तो अपना रोल क्यों दें? अच्छा काम।
टॉम ऑगर

2
इस फ़ंक्शन के साथ किया जा सकने वाला एक सुधार यह देखने के लिए जाँच कर रहा है कि क्या फ़ील्ड का मान है या नहीं, इसलिए यह खाली फ़ील्ड में http नहीं जोड़ रहा है।
रैंडी जॉनसन

यह सापेक्ष प्रोटोकॉल के साथ काम नहीं करता है। जैसेecho addScheme('//google.com');
टायलान

2
@Taylan हाँ, आप करने के लिए होगाltrim($url, '/')
जैक

51

बस जांचें कि क्या कोई प्रोटोकॉल है (": //" द्वारा चित्रित) और "http: //" जोड़ें यदि नहीं है।

if (false === strpos($url, '://')) {
    $url = 'http://' . $url;
}

नोट : यह एक सरल और सीधा समाधान हो सकता है, लेकिन जैक के जवाब का उपयोग parse_urlलगभग उतना ही सरल और अधिक मजबूत है। आपको शायद उस एक का उपयोग करना चाहिए।


2

इसके लिए सबसे अच्छा जवाब कुछ इस तरह होगा:

function addhttp($url) 
{
  return $url = empty(parse_url($url)['scheme']) ? 'http://' . ltrim($url, '/') : $url;
}

1

इसके लिए स्ट्रिंग को स्कैन करें ://, अगर उसमें यह नहीं है, http://तो स्ट्रिंग को आगे बढ़ाएं .., बाकी सब बस स्ट्रिंग का उपयोग करें।

यह तब तक काम करेगा जब तक आपके पास बकवास इनपुट स्ट्रिंग न हो।


मैं एक रेगेक्स संस्करण को पसंद करता हूं :)
रयान

3
Regex पर बहुत जल्दी मत बनो। रेगेक्स पढ़ने में कठिन हो जाता है और समस्या बढ़ने पर यह एक और समस्या / बग का परिचय दे सकता है।
रोजडी कासिम

0

निकफ समाधान संशोधित:

function addhttp($url) {
    if (!preg_match("@^https?://@i", $url) && !preg_match("@^ftps?://@i", $url)) {
        $url = "http://" . $url;
    }
    return $url;
}

मेरा मानना ftps://है कि यह भी मान्य है।
एलिक्स एक्सल

@ एलिक्स: इसके बारे में पता नहीं था। संपादित।
कमशेतो

0
<?php

if (!preg_match("/^(http|ftp):/", $_POST['url'])) {
   $_POST['url'] = 'http://'.$_POST['url'];
}
$url = $_POST['url'];

?>

यदि यह नहीं है तो यह कोड URL में http: // जोड़ देगा।


-1

इसे इस्तेमाल करे। जलराशि नहीं *, लेकिन काफी अच्छी हो सकती है:

function addhttp($url) {
    if (!preg_match("@^[hf]tt?ps?://@", $url)) {
        $url = "http://" . $url;
    }
    return $url;
}

*: अर्थात्, "fttps: //" जैसे उपसर्गों को वैध माना जाता है।


6
यह मेल खाएगा (एर्गो रिटर्न सच और अगर गलत का मूल्यांकन करेगा) अजीब संयोजन .. जैसे htps, fttps, fttp, htp, मुझे लगता है।
कमशेतो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.