2011-07-07 15 views
7

http://site.com/?status=4387hg843hg89473gh87934h89g734hg8973hg9873hg8973h4987g3h489g7h89h849g5एक यूआरएल क्वेरी तर्क कब तक हो सकता है?

status का अधिकतम आकार क्या है जो PHP पढ़ सकता है?

मैं लॉगिन या साइनअप पर त्रुटि/सफलता संदेश पास करना चाहता हूं, और एकमात्र तरीका यह है कि मैं इसे एक यूआरएल पर रीडायरेक्ट कर रहा हूं और संदेशों को उस यूआरएल के तर्क के रूप में जोड़ सकता हूं।

जैसे:

<?php 

$errors = array(
    1 => 'Password must have between 6 and 20 characters', 
    2 => 'User name must contain only A-Z, a-z and 0-9 characters', 
    3 => 'Captcha code does not match', 
); 

$errors = base64_encode(serialize($errors)); 

header("Location: http://www.example.com/?status={$errors}"); 
die(); 

(यदि आप ऐसा करने के विभिन्न तरीकों को जानते हैं तो कृपया मुझे बताएं;)

उत्तर

9

है RFC2616 Section 3.2.1 के अनुसार:

HTTP प्रोटोकॉल किसी भी यूआरआई की लंबाई पर एक प्रायोरी सीमा जगह नहीं है। सर्वर किसी भी संसाधन के यूआरआई को संभालने में सक्षम होना चाहिए, और असंबद्ध लंबाई के यूआरआई को संभालने में सक्षम होना चाहिए यदि वे जीईटी-आधारित फॉर्म प्रदान करते हैं जो ऐसे यूआरआई उत्पन्न कर सकता है। एक सर्वर लौटना चाहिए 414 (अनुरोध- URI बहुत लंबा है) का दर्जा अगर यूआरआई अब है की तुलना में सर्वर संभाल कर सकते हैं ( अनुभाग 10.4.15 देखें)।

इसके साथ, कई ब्राउज़र अनंत लंबाई के यूआरएल की अनुमति नहीं देते हैं। उदाहरण के लिए, इंटरनेट एक्सप्लोरर में limit of 2,083 characters है।

आपके मामले में, मैं त्रुटि स्टोर करने के लिए एक सत्र चर का उपयोग कर सुझाव है और एक बार यह प्रदर्शित किया गया है उसे निकाल दें।

फ़ाइल है कि त्रुटियों का उत्पादन:

<?php 

$errors = array(
    1 => 'Password must have between 6 and 20 characters', 
    2 => 'User name must contain only A-Z, a-z and 0-9 characters', 
    3 => 'Captcha code does not match', 
); 

session_start(); 
$_SESSION['errors'] = $errors; 

header("Location: http://www.example.com/"); 
die(); 

अन्य पेज:

<?php 

session_start(); 

if (! empty($_SESSION['errors'])) 
{ 
    // Do something with the errors. 

    // Remove the errors from the session so they don't get displayed again later. 
    unset($_SESSION['errors']); 
} 
+0

+1 मैं वही चीज़ लिखने वाला था –

+0

धन्यवाद, मैं इसे – Alex

+0

आज़माउंगा, मुझे विश्वास है कि जब आपने अनंत कहा था, तो आप सीमित थे। –

1

यह किसी और चीज से उपयोगकर्ता के ब्राउज़र पर अधिक निर्भर है। उदाहरण के लिए, इंटरनेट एक्सप्लोरर उन यूआरएल का समर्थन नहीं करता है जिनमें 2083 से अधिक वर्ण हैं। PHP उस सीमा तक (और अच्छी तरह से अतीत) ठीक से संभालना चाहिए। base64_encode से बचें (जो अनावश्यक है) मदद करेगा। इसके बजाय urlencode का उपयोग करें (मान लें कि आप किसी बाइनरी डेटा को पास नहीं कर रहे हैं)।

मुझे यकीन है कि लोग ऐसा करने के विभिन्न तरीकों से मदद करना पसंद करेंगे, लेकिन आपको अधिक कोड प्रदान करना होगा।

+0

मैं दिन IE4 में वापस याद (या इसे IE5 या IE6 या नेटस्केप नेविगेटर था? 3? मैं बूढ़ा हो रहा हूं ...) क्वेरी स्ट्रिंग में केवल 256 वर्णों का समर्थन करेगा। वास्तव में अच्छा समय। –

+0

हम्म, परिचित लगता है। यह नहीं कह सकता कि मुझे कौन सा ब्राउज़र याद है। –

1

मेरे सुझाव HTTP के बजाय HTTP POST का उपयोग प्राप्त

+0

मैंने इसके बारे में सोचा, लेकिन मैं '$ _POST' कैसे भेजूं? – Alex

+0

कर्ल – Nabeel

+0

मदद अगर यह एक रूप है, ''

टैग को जोड़ने के 'विधि =" पोस्ट "' होगा। –

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