क्या ब्राउज़र "\ r \ n" या "\ n" भेजते हैं या क्या यह ब्राउज़र पर निर्भर करता है?


102

इस सवाल ने मुझे एक लाख साल तक परेशान किया है ... जब भी मैं एक टेक्स्टारिया के साथ एक वेबसाइट बनाता हूं जो मल्टी-लाइन (जैसे कि उपयोगकर्ता की प्रोफ़ाइल के लिए "बायो") की अनुमति देता है, मैं हमेशा निम्नलिखित पागल कोड लिख रहा हूं:

// C# code sample...
bio = bio.Replace("\r\n", "\n").Replace("\r", "\n");
bio = Regex.Replace(@"\n{2,}", "\n\n");

<textarea name="Bio"></textarea>यदि एक से अधिक रेखाएँ हैं , तो ब्राउज़र क्या भेजते हैं?


वाह, मैंने सोचा कि यह एक अजीब सवाल था, जिस पर कोई ध्यान नहीं जा रहा था ... लेकिन 1 घंटे में 16 वोट, पागलपन।
टिमोथी खुरई

इसके बारे में सोचते हुए, मैं कभी भी इससे संबंधित समस्या के बारे में नहीं आया हूँ। यदि कोई किसी नई पंक्ति में प्रवेश करता है, तो उसे एक नई लाइन के रूप में दिखाया जाता है, सभी OS'es में, MySQL क्लाइंट में, ब्राउज़रों में, आदि इस तरह दिखता है कि अधिकांश सॉफ्टवेयर का मामले में कुछ हद तक सुसंगत है। बेशक, अगर मैं इसके साथ कुछ महत्वपूर्ण करने जा रहा हूं, तो मैं हमेशा सामान्य करता हूं।
हालिल Halzgür

यदि मैं "\ r \ n" पर भरोसा करता हूं, तो समस्या आएगी, और तब उपयोगकर्ता के बायो का "HTML स्वरूपित" संस्करण बना रहा था, और जब से मैं कभी भी \ "r \ n" पर नहीं चलता, तो मैं इसे सभी में शामिल कर लेता हूं एक <p>टैग।
टिमोथी खुरी

जवाबों:


50

HTTP और माइम चश्मा निर्दिष्ट करें कि हैडर लाइनों \ r \ n साथ समाप्त होना चाहिए, लेकिन वे (कुछ लोगों का तर्क था कि अगर वे स्पष्ट हैं कि यह स्पष्ट नहीं है) स्पष्ट क्या एक पाठ क्षेत्र की सामग्री के साथ करने के बारे में नहीं हैं। (उदाहरण के लिए, समस्या के बारे में HTML वर्किंग ग्रुप के इस धागे को देखें ।)

संदेश हेडर के बारे में HTTP / 1.1 युक्ति से एक उद्धरण यहां दिया गया है:

संदेश-हेडर फ़ील्ड के लिए लाइन टर्मिनेटर अनुक्रम CRLF है। हालांकि, हम अनुशंसा करते हैं कि ऐसे हेडर्स को पार्स करते समय, एक एकल एलएफ को एक लाइन टर्मिनेटर के रूप में पहचानें और अग्रणी सीआर को अनदेखा करें।

मुझे लगता है कि यह सामान्य रूप से एक अच्छी रणनीति है: आप जो भी स्वीकार करते हैं उसमें उदारता और उदारता रखते हैं। आपको यह मान लेना चाहिए कि आपको सभी प्रकार के लाइन टर्मिनेटर प्राप्त होंगे। (ध्यान दें कि CRLF और LF के अलावा, मैक OS-9 ने अकेले CR का उपयोग किया है, और अभी भी उनमें से कुछ आसपास हैं। यूनिकोड मानक (खंड 5.8) वर्ण अनुक्रमों की एक विस्तृत श्रृंखला को निर्दिष्ट करता है जिन्हें लाइन टर्मिनेटर के रूप में मान्यता दी जानी चाहिए; यहाँ उनकी एक सूची है ।)


6
मुझे विश्वास नहीं है कि चश्मा निर्दिष्ट करता है कि एक textarea क्या पैदा करता है।
मार्क थॉमस

2
@Will: मूल प्रश्न को फिर से पढ़ें। यह विशेष रूप से इस बारे में पूछता है कि ब्राउज़र किस तरह की सामग्री को एन्कोड करता है textarea(जो कि ऐसी चीज है जो कल्पना, या कम से कम टेड के उद्धृत खंड में, विवश नहीं करता है)।
जॉन बार्थोलोमेव

2
@ मर्क - आप सही हैं। विभिन्न मंचों में उस समस्या के बारे में अंतहीन बहस चल रही है। ( इस धागे को 1995 से एक HTML वर्किंग ग्रुप से देखें।
टेड होप

2
इस उत्तर को संपादित करने की आवश्यकता है। यह HTTP युक्ति का हवाला देते हुए शुरू होता है लेकिन यह textareas से संबंधित नहीं है।
डकमास्टरो

2
मैंने किया था, लेकिन उत्तर अभी भी HTTP का हवाला देकर शुरू होता है, जो कि अगर उल्लेख किया जाए तो जोर देने के लिए गलत युक्ति है। आपकी सम्मिलित बोली विशेष रूप से "संदेश-हेडर फ़ील्ड" को संबोधित करती है, लेकिन textareaसंदेश-हेडर फ़ील्ड के रूप में नहीं भेजी जाती हैं। textareaसंदेश-शरीर में अलग हो जाता है जो अलग है।
डकमास्ट्रो

30

<textarea></textarea>अगर यह एक से अधिक लाइनें हैं तो ब्राउज़र किस लिए भेजते हैं?

सभी आधुनिक ब्राउज़र CRLF ( \r\n) भेजते हैं । हालाँकि यह कुछ ऐसा नहीं है जिसे संतोषजनक ढंग से मानकीकृत किया गया है, इसलिए मैं निश्चित रूप से सभी मल्टी-लाइन इनपुट टेक्स्ट की नईलाइन्स को सामान्य करने के लिए इसे सार्थक मानूंगा।

जब मूल्य को फॉर्म से सीधे सबमिट किए जाने के बजाय जावास्क्रिप्ट के माध्यम से पढ़ा जाता है, तो ब्राउज़र व्यवहार भिन्न होता है। IE और ओपेरा में CRLFs के साथ तार वापसी; फ़ायरफ़ॉक्स और WebKit LF लौटाते हैं। तो जावास्क्रिप्ट / XMLHttpRequest सहायता के साथ सबमिट किया जाने वाला कोई भी रूप किसी भी रूप में आने की संभावना है।


क्या जावास्क्रिप्ट प्लेटफार्मों पर किसी विशेष ब्राउज़र पर लगातार व्यवहार करता है? (उदाहरण के लिए, क्या फ़ायरफ़ॉक्स एलएफ के साथ विंडोज़, मैक और मोबाइल प्लेटफ़ॉर्म पर वापस लौटता है?)
टेड हॉप

1
@ टेड: यह व्यवहार फ़ायरफ़ॉक्स, ओपेरा और वेबकीट पर प्लेटफार्मों के अनुरूप है। IE5 / Mac मैंने अभी परीक्षण नहीं किया है, क्योंकि यह अब लंबे समय से मृत है, लेकिन उस ब्राउज़र में IE5 / Win के कई अंतर हैं।
बोबन्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.