2013-06-17 3 views
8

मेरी वेबसाइट में, उपयोगकर्ता अपनी प्रोफ़ाइल में एक यूआरएल डाल सकते हैं।एक HTML लिंक को पूर्ण करने के लिए कैसे मजबूर करें?

यह यूआरएल http://www.google.com या www.google.com या google.com हो सकता है।

यदि मैं बस अपने PHP कोड <a href="$url">$url</a> में डालता हूं, तो लिंक हमेशा पूर्ण नहीं होता है।

मैं a टैग को पूर्ण करने के लिए कैसे मजबूर कर सकता हूं?

+2

सुनिश्चित करें कि यह हमेशा http: // '(या प्रोटोकॉल-रिश्तेदार लिंक के लिए' // 'के साथ प्रीफ़िक्स किया गया है –

+1

आप विंडो.लोकेशन का उपयोग करने का प्रयास कर सकते हैं लेकिन उपयोगकर्ताओं के इनपुट को प्रमाणित करना सबसे अच्छा है। उन्हें एक वैध यूआरएल प्रदान करने के लिए संकेत दें। – ysrb

उत्तर

5

http एक प्रोटोकॉल का प्रयोग करें, अधिमानतः: //

<a href="http://www.google.com">Google</a> 

उपयोगकर्ताओं पूछो इस प्रारूप में url दर्ज करने के लिए, या जोड़ http: // यदि नहीं जोड़ा।

3

मुझे हाल ही में कुछ ऐसा करना पड़ा।

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

असल में, यदि यूआरएल में 'http' नहीं है तो इसे स्ट्रिंग (उपसर्ग) के सामने जोड़ें।

या हम रेगुलर एक्सप्रेशन से

$http_pattern = "/^http[s]*:\/\/[\w]+/i"; 

if (!preg_match($http_pattern, $url, $match)){ 
    $url = 'http://' .$url; 
} 

साथ ऐसा कर सकते एक गलती की ओर इशारा करने के लिए @JamesHilton को धन्यवाद। धन्यवाद!

+1

यह हमेशा झूठी वापसी करेगा क्योंकि अगर यह $ url की शुरुआत में http पाता है, तो यह 0 लौटाएगा क्योंकि स्ट्रिंग 'http' की स्थिति इंडेक्स 0 से शुरू होती है। 0 को कथन में गलत माना जाता है, इसलिए आपको इसके बजाय === ऑपरेटर का उपयोग करें। –

+0

@ जेम्स हिल्टन अरे जीज़ कितना शर्मनाक है! फिक्स्ड, धन्यवाद! – StephanieQ

+0

यदि आप इसका उपयोग करते हैं तो शायद यह एक बेहतर RegExp होगा: '"/^ https?: \/{2} \ w/i "' – eddy85br

6

यदि आप // के साथ URL को उपसर्ग करते हैं तो इसे पूर्ण रूप से माना जाएगा। उदाहरण के लिए:

<a href="//google.com">Google</a>

ध्यान रखें कि यह उसी प्रोटोकॉल का उपयोग करेगा जिस पर पृष्ठ परोसा जा रहा है (उदाहरण के लिए यदि आपका पृष्ठ का URL https://path/to/page परिणामस्वरूप यूआरएल https://google.com होगा)।

+0

आपको यह भी जिक्र करना चाहिए कि यदि पूर्ण यूआरआई केवल दो फॉरवर्ड स्लैश के साथ निर्दिष्ट है, तो वर्तमान यूआरएल के प्रोटोकॉल को यूआरएल से कनेक्ट करते समय इस्तेमाल किया जाएगा, यानी https://yoursite.net का परिणाम https://google.com होगा, जबकि http://yoursite.net का परिणाम http: // google.com –

+0

हां, जो इस मामले में मामले के अनुरूप है। वैसे आपके लिंक टूटा हुआ है (पार्स किया गया)। –

+0

यह काम नहीं करता है यदि आपकी वेबसाइट प्रोटोकॉल यूआरएल प्रोटोकॉल से अलग है। यदि आपकी वेबसाइट https है तो http url काम नहीं करेगा क्योंकि इसे इसके बजाय https दिया जाएगा। – DeepBlue

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