2011-08-09 11 views
13

संभव डुप्लिकेट:
PHP validation/regex for URLPHP में एक URL सत्यापित किया जा रहा

वहाँ अगर एक यूआरएल PHP में मान्य है की जाँच करने के किसी भी, आसान, सुरक्षित और तेज तरीका है?

+2

वैध उपयोग करने के लिए इस नियमित अभिव्यक्ति ues कर सकते हैं के रूप में इसे सही ढंग से हल करता है? या अगर यह केवल एक स्ट्रिंग है जो यूआरएल के लिए आरएफपी का पालन करती है? –

उत्तर

44

हाँ, वहाँ है! filter_var का उपयोग करें:

if (filter_var($url, FILTER_VALIDATE_URL) !== false) ... 

FILTER_VALIDATE_URLRFC 2396 के अनुसार मान्य करता है यूआरएल।

+15

FILTER_VALIDATE_URL अविश्वसनीय है और यह आईपीवी 6 पते के आधार पर यूआरएल मान्य नहीं कर सकता । मैंने PHP यूआरएल सत्यापन के बारे में किसी भी प्रश्न के लिए एसओ खोजते समय इस पर ठोकर खाई, क्योंकि इसका उपयोग नहीं किया जाता है, क्योंकि मुझे यह बहुत बेकार लगता है। – GordonM

+3

इसे एक वैध यूआरएल के रूप में व्याख्या किया जाता है, जो कुकी को सही ढंग से प्रदर्शित करता है: 'echo filter_var (' http://example.com/ "> ', FILTER_VALIDATE_URL);' कृपया 'filter_var() से सावधान रहें ; 5.4 –

+0

में गॉर्डनएम की टिप्पणी के बारे में, निम्न उदाहरण पर एक नज़र डालें, उदाहरण के लिए PHP का FILTER_VALIDATE_URL शायद यह काम नहीं करता है कि आप इसकी अपेक्षा कैसे कर सकते हैं: https://gist.github.com/anonymous/10967187 – coatesap

0

यह मान्य की आपकी परिभाषा पर निर्भर करता है। अर्थात् मान्य, डोमेन नाम हल करता है, आदि

त्वरित दृष्टिकोण सही प्रारूप के सत्यापन के लिए एक अच्छी नियमित अभिव्यक्ति के खिलाफ यूआरएल का परीक्षण करने के लिए preg_match का उपयोग करना होगा। इस धागे पर कुछ अच्छे उदाहरण दिखाई देते हैं PHP validation/regex for URL

+0

"वैध" के साथ मेरा मतलब है, अगर उसके पास http: // है और .EXT –

+4

@ ओलिवर के साथ समाप्त होता है: इस प्रश्न के लिए URL पर ध्यान दें। यह आपकी परिभाषा से मान्य यूआरएल नहीं है। –

+1

फिर एक अच्छी नियमित अभिव्यक्ति या filter_var के खिलाफ preg_match http://www.php.net/manual/en/filter.filters.validate.php आपकी सबसे अच्छी शर्त है। यदि आप रेगेक्स रूट पर जाते हैं, तो सुनिश्चित करें कि आप एक अच्छा विकल्प प्राप्त करते हैं जिसमें सभी वैध उपयोग मामलों (http: // https: // FQDN या नहीं आदि) शामिल हैं –

12

ठीक है अगर हम RFC 3986 पर देखते हैं तो हम एक यूआरएल की परिभाषा पा सकते हैं।

और यदि हम परिशिष्ट बी पर एक नज़र डालें एक यूआरएल को पार्स करने के नियमित अभिव्यक्ति का उपयोग कर के लिए एक गाइड है:

परिशिष्ट बी के रूप में एक नियमित अभिव्यक्ति

वाला URI संदर्भ पार्स " पहले मैच जीतता है लालची "
बहुविकल्पी POSIX रेगुलर एक्सप्रेशन द्वारा प्रयोग किया जाता विधि" एल्गोरिथ्म के समान है ", यह है
प्राकृतिक और सामान्य
संभावित पांच यूआरआई रेफरी के घटकों पार्स करने के लिए रेगुलर एक्सप्रेशन का उपयोग करने के लिए erence।

निम्नलिखित पंक्ति
अपने घटकों में अच्छी तरह से गठित यूआरआई संदर्भ को तोड़ने के लिए नियमित अभिव्यक्ति है।

^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))? 
    12   3 4   5  6 7  8 9 

दूसरी पंक्ति में संख्या से ऊपर पठनीयता की सहायता के लिए ही कर रहे हैं; वे प्रत्येक उप-संपीड़न (यानी, प्रत्येक जोड़ा संश्लेषण) के लिए संदर्भ बिंदु इंगित करते हैं। हम मान को उप-संपीड़न के लिए $ के रूप में मिलान करते हैं। उदाहरण के लिए, निम्नलिखित उपसूचक मैचों में ऊपर अभिव्यक्ति मिलान करने के लिए

http://www.ics.uci.edu/pub/ietf/uri/#Related 

परिणाम:

$1 = http: 
    $2 = http 
    $3 = //www.ics.uci.edu 
    $4 = www.ics.uci.edu 
    $5 = /pub/ietf/uri/ 
    $6 = <undefined> 
    $7 = <undefined> 
    $8 = #Related 
    $9 = Related 

जहां इंगित करता है कि घटक मौजूद नहीं है, के रूप में क्वेरी घटक के लिए मामला है उदाहरण के ऊपर। इसलिए, हम के रूप में

scheme = $2 
    authority = $4 
    path  = $5 
    query  = $7 
    fragment = $9 

विपरीत दिशा में जा रहे हैं पांच घटक का मूल्य निर्धारित कर सकते हैं, तो हम धारा 5.3 के एल्गोरिथ्म का उपयोग करके उसके घटकों से यूआरआई संदर्भ पुन: कर सकते हैं।

आप मैन्युअल रूप से यूआरएल को पार्स या PHP 4 में parse_url function आते में बनाया गया और 5

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