2010-05-04 12 views
93

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

उदाहरण:

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 
+0

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

+6

@ एंथनी: वह कहता है कि यदि कोई अन्य प्रोटोकॉल नहीं है तो वह "http: //" जोड़ना चाहता है। – nickf

+3

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

उत्तर

228

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

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

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

+0

धन्यवाद एलिक्स, सबसे अच्छा और कामकाजी संस्करण आपका है :) – Ryan

+1

@ डेविड: कोई समस्या नहीं, आपका स्वागत है। –

+4

नीचे addhttp और addcheme की तुलना करने के बाद, मैं निष्कर्ष पर आया हूं कि प्रदर्शन के संदर्भ में addcheme बेहतर है: '$ url =" www.google.com "; $ init = microtime (सत्य); ($ i = 1; $ i <100000; $ i ++) { \t ऐडशेम ($ url); } गूंज माइक्रोटाइम (सत्य) - $ init; गूंज "
"; $ init = microtime (सत्य); ($ i = 1; $ i <100000; $ i ++) { \t addhttp ($ url); } गूंज माइक्रोटाइम (सत्य) - $ init; ' –

-1

इस प्रयास करें। नहीं निर्विवाद *, लेकिन काफी अच्छा हो सकता है:

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

*: जो है, जैसे उपसर्ग "fttps: //" के रूप में मान्य किया जाता है।

+5

यह मिलान करेगा (ergo वापस सच है और अगर झूठी मूल्यांकन करेंगे) अजीब संयोजन ..एचटीपीएस, एफटीपीएस, एफटीपी, एचटीपी, मुझे लगता है। – kamasheto

+0

इसे पढ़ने के लिए मेरी सलाह ... शायद इसका उपयोग न करें। –

0

nickf समाधान संशोधित:

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

मुझे विश्वास है कि 'ftps: //' भी मान्य है। –

+0

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

2

:// के लिए स्ट्रिंग स्कैन करें, यदि इसमें यह नहीं है, तो http:// स्ट्रिंग पर प्रीपेड करें .., बाकी सब कुछ केवल स्ट्रिंग का उपयोग करें।

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

+0

मैं एक regex संस्करण पसंद करते हैं :) – Ryan

+3

regex पर बहुत जल्दी मत बनो। Regex पढ़ने के लिए मुश्किल हो जाता है और समस्या बढ़ने के बाद यह एक और समस्या/बग पेश कर सकता है। सभी का सबसे पठनीय समाधान होने के लिए –

48

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

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

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

+5

+1। प्रोग्रामर का इरादा एक नज़र में जल्दी से समझा जाता है। –

+2

इस तरह के लिंक के बारे में कैसे- चुंबक:? Fh = sdfs ... – holden321

+0

+1 सबसे आसान समाधान के लिए +1 –

0
<?php 

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

?> 

यह कोड http: // को यूआरएल में जोड़ देगा यदि यह वहां नहीं है।

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" 

भी देखें:

101

लेखन के समय, जवाब में से कोई भी इस बात के लिए एक अंतर्निहित फ़ंक्शन का उपयोग किया parse_url()

+9

यह चयनित उत्तर होना चाहिए - भाषा का मूल समर्थन होने पर अपना खुद का रोल क्यों करें? अच्छा काम। –

+1

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

+0

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

-4

prep_url ($ यूआरएल) का उपयोग करें; //

+1

होना चाहिए यह कोडलाइनर सहायक कार्य है। क्या होगा यदि आप उस ढांचे का उपयोग नहीं कर रहे हैं? –

1

इस के लिए सर्वोत्तम उत्तर कुछ इस तरह होगा::

$url = prep_url($url); 

अगर चेक कि http मौजूद है कुछ भी नहीं है अन्यथा हो वह http जोड़ने

function addhttp($url) 
{ 
    return $url = empty(parse_url($url)['scheme']) ? 'http://' . ltrim($url, '/') : $url; 
} 
संबंधित मुद्दे