इनपुट टैग के अंदर HTML नाम विशेषता में कौन से वर्णों की अनुमति है?


83

मेरे पास एक PHP स्क्रिप्ट है जो <input>गतिशील रूप से एस उत्पन्न करेगी , इसलिए मुझे आश्चर्य हो रहा था कि क्या मुझे विशेषता में किसी भी वर्ण को फ़िल्टर करने की आवश्यकता है name

मुझे पता है कि नाम को एक पत्र के साथ शुरू करना है, लेकिन मुझे कोई अन्य नियम नहीं पता है। मुझे लगता है कि वर्ग कोष्ठक की अनुमति दी जानी चाहिए, क्योंकि PHP इनका उपयोग प्रपत्र डेटा से सरणियाँ बनाने के लिए करता है। कोष्ठक के बारे में कैसे? रिक्त स्थान?

जवाबों:


28

अक्षरों को प्रपत्र नियंत्रण नामों में प्रकट होने पर एकमात्र वास्तविक प्रतिबंध तब होता है जब कोई फॉर्म GET के साथ प्रस्तुत किया जाता है

"प्राप्त" विधि ASCII वर्णों के लिए डेटा सेट मान को प्रतिबंधित करती है। " संदर्भ

यहाँ पर एक अच्छा धागा है


तो अन्य तत्वों की तुलना में इसके nameलिए एक अलग डेटा प्रकार है <input>? दिलचस्प।
DLH

यह समान <a>और अधिकांश तत्वों के समान है , लेकिन अलग-अलग<meta>
Alohci

4
हां। बस विशेषता <input>में सभी प्रकार की बकवास के साथ कोशिश की name, और यह HTML 4.01 स्ट्रिक्ट में मान्य है। स्वीकार किए जाते हैं!
DLH

ट्विटर इस तरह के नाम का उपयोग करता है, कोई विशेष कारण कुछ सलाह पाने के लिए ...... उपयोगकर्ता [user_password], उपयोगकर्ता [ईमेल]
विशाल शर्मा

1
"फॉर्म कंट्रोल नामों में कौन से अक्षर दिखाई दे सकते हैं, इस पर एकमात्र वास्तविक प्रतिबंध है जब एक फॉर्म GET के साथ सबमिट किया जाता है" - नहीं। यह प्रतिबंधित नहीं किया जा सकता है कि नाम में क्या दिखाई दे सकता है, इसका मतलब यह है कि इसे परिवर्तित होने पर URL एनकोड करना होगा एक URL के लिए।
क्वेंटिन

55

ध्यान दें, कि सभी वर्ण nameफ़ॉर्म फ़ील्ड की विशेषताओं के लिए प्रस्तुत नहीं किए गए हैं (POST का उपयोग करते समय भी)!

श्वेत-अंतरिक्ष वर्णों की छंटनी की जाती है और आंतरिक श्वेत-स्थान वर्णों के साथ-साथ चरित्र .को प्रतिस्थापित किया जाता है _। (क्रोम 23, फ़ायरफ़ॉक्स 13 और इंटरनेट एक्सप्लोरर 9, सभी Win7 में परीक्षण किया गया।)


11
इस नोटिस, पाल को जोड़ने के लिए धन्यवाद। मैं कोडिंग का उपयोग शुरू करने वाला था। एक विभाजक के रूप में।
डेविस पेक्सोटो

1
इस पृष्ठ के अनुसार इनर व्हाइट-स्पेस को प्लस साइन (+) से बदल दिया गया है: w3schools.com/tags/tryit.asp?filename=tryhtml_form_submit
thdoan

2
मैं दूसरा @Dave। जो लोग एक ही बात सोच रहे थे, आप शायद सरणी-शैली इनपुट की तलाश कर रहे हैं: first[second]इसके बजाय first.second
JD

5
मैं यह नोट करना चाहूंगा कि यह एक सर्वर-विशिष्ट चीज़ है, ब्राउज़र की चीज़ नहीं। Win7 FF3 / 3.5 / 31, IE5 / 7/8/9/10 / Edge, Chrome39, और Safari Windows 5 पर परीक्षण किया गया, और उन सभी ने POST में नाम के रूप में "test this.stuff" (चार प्रमुख स्थान) भेजे। ASP.NET देव सर्वर VS2012 के साथ बंडल किया गया।
abluejelly

3
नीचे @ अलेक्जेंडर की टिप्पणी देखें। कुछ सर्वर परिवर्तित हो सकते हैं। ' '_' के लिए, लेकिन यह ब्राउज़र पर नहीं हो रहा है।
जेफ लोरी

38

कोई भी चरित्र जिसे आप [X] में शामिल कर सकते हैं, HTML फ़ाइल में डाल देना ठीक है <input name>। जैसा कि एलेन की टिप्पणी में कहा गया है, <input name>युक्त के रूप में परिभाषित किया गया है CDATA, इसलिए केवल वही चीजें जो आप वहां नहीं डाल सकते हैं वे नियंत्रण कोड और अमान्य कोडपॉइंट हैं जो अंतर्निहित मानक (एसजीएमएल या एक्सएमएल) को रोकते हैं।

HTML4 कल्पना से एलन ने डब्ल्यू 3 उद्धृत किया:

ध्यान दें। "प्राप्त" विधि ASCII वर्णों के लिए डेटा सेट मान को प्रतिबंधित करती है। केवल "पोस्ट" विधि (enctype = "मल्टीपार्ट / फॉर्म-डेटा" के साथ) पूरे ISO10642 वर्ण सेट को कवर करने के लिए निर्दिष्ट है।

हालांकि यह वास्तव में व्यवहार में सच नहीं है।

सिद्धांत यह है कि application/x-www-form-urlencodedडेटा में फ़ॉर्म के नाम या मूल्यों के लिए एन्कोडिंग निर्दिष्ट करने के लिए कोई तंत्र नहीं है, इसलिए गैर-ASCII वर्णों का उपयोग करना या तो "निर्दिष्ट नहीं" है जैसा कि काम करना है और आपको multipart/form-dataइसके बजाय POSTed का उपयोग करना चाहिए ।

दुर्भाग्य से, वास्तविक दुनिया में, कोई भी ब्राउज़र किसी फ़ील्ड के लिए एन्कोडिंग निर्दिष्ट नहीं करता है, भले ही वह सैद्धांतिक रूप से किसी multipart/form-dataPOST अनुरोध निकाय के उप-शीर्ष शीर्षलेखों में हो । (मेरा मानना ​​है कि मोज़िला ने इसे एक बार लागू करने की कोशिश की, लेकिन सर्वर टूटने के बाद इसका समर्थन किया।)

और कोई भी ब्राउज़र आश्चर्यजनक रूप से जटिल और बदसूरत RFC2231 मानक को लागू नहीं करता है जो कि मल्टीपार्ट के सबपार्टर हेडर में एनकोडेड गैर-एएससीआईआई फील्ड नामों को सम्मिलित करने के लिए आवश्यक होगा। किसी भी स्थिति में, परिभाषित करने वाली HTML युक्ति multipart/form-dataसीधे यह नहीं कहती है कि RFC2231 का उपयोग किया जाना चाहिए, और, यदि इसे आज़माया जाता है, तो यह फिर से सर्वर को तोड़ देगा।

तो स्थिति की वास्तविकता यह है कि यह जानने का कोई तरीका नहीं है कि एक फॉर्म सबमिशन में नामों और मूल्यों के लिए एन्कोडिंग का क्या उपयोग किया जा रहा है, चाहे वह किस प्रकार का हो। फ़ील्ड नाम और मान के साथ क्या करेंगे जो गैर- ASCII वर्ण हैं, GET और दोनों प्रकार के POST फ़ॉर्म के लिए समान हैं: यह एन्कोडिंग पृष्ठ का उपयोग करते हुए एन्कोडिंग का उपयोग करके उन्हें एन्कोड करता है। गैर- ASCII GET फॉर्म नाम बाकी सब चीजों से ज्यादा टूटे हुए नहीं हैं।

DLH:

इसलिए नाम में अन्य तत्वों की तुलना में एक अलग डेटा प्रकार है?

वास्तव में एकमात्र तत्व जिसकी nameविशेषता नहीं CDATAहै <meta>। सभी के विभिन्न उपयोगों के लिए HTML4 युक्ति की विशेषता सूची देखें name; यह एक अतिभारित विशेषता नाम है, विभिन्न तत्वों पर कई अलग-अलग अर्थ हैं। यह आमतौर पर एक बुरी बात मानी जाती है।

हालाँकि, आमतौर पर इन दिनों आप nameफॉर्म फील्ड (जहां यह एक नियंत्रण नाम है) और param(जहां यह एक प्लग-इन विशेष पैरामीटर पहचानकर्ता है) को छोड़कर बचना होगा । यह केवल दो अर्थों से जूझना है। पृष्ठ पर या nameजैसे तत्वों की पहचान के लिए पुराने स्कूल के उपयोग से बचा जाना चाहिए ( इसके बजाय उपयोग )।<form><a>id


9

जबकि एलेन की टिप्पणी ने ओपी के प्रत्यक्ष प्रश्न का उत्तर दिया और बॉबिन ने कुछ शानदार जानकारी प्रदान की, मेरा मानना ​​है कि बहुत से लोग यहां आए हैं जो अधिक विशिष्ट प्रश्न का उत्तर दे सकते हैं: "क्या मैं फॉर्म के इनपुट नाम विशेषता में डॉट चरित्र का उपयोग कर सकता हूं?"

जैसा कि यह धागा पहले परिणाम के रूप में आया था जब मैंने इस ज्ञान की खोज की थी तो मैंने अनुमान लगाया था कि मुझे जो भी मिला उसे साझा कर सकता हूं।

सबसे पहले, माथियास ने दावा किया कि:

चरित्र। द्वारा प्रतिस्थापित किया जाता है _

यह असत्य है। मुझे नहीं पता कि ब्राउज़र ने वास्तव में 2013 में इस तरह का ऑपरेशन किया था - हालांकि, मुझे संदेह है कि। ब्राउज़र्स डॉट वर्ण भेजते हैं जैसे वे (POST डेटा के बारे में बात कर रहे हैं)! आप इसे किसी भी सभ्य ब्राउज़र के डेवलपर टूल में देख सकते हैं।

कृपया, ध्यान दें कि छोटी टिप्पणी abluejelly द्वारा की गई है, जो संभवतः कई लोगों द्वारा याद की गई है:

मैं यह नोट करना चाहूंगा कि यह एक सर्वर-विशिष्ट चीज़ है, ब्राउज़र की चीज़ नहीं। Win7 FF3 / 3.5 / 31, IE5 / 7/8/9/10 / Edge, Chrome39, और Safari Windows 5 पर परीक्षण किया गया, और उन सभी ने POST में नाम के रूप में "test this.stuff" (चार प्रमुख स्थान) भेजे। ASP.NET देव सर्वर VS2012 के साथ बंडल किया गया।

मैंने इसे अपाचे HTTP सर्वर (v2.4.25) से जांचा और वास्तव में "foo.bar" जैसे इनपुट नाम को "foo_bar" में बदल दिया गया है। लेकिन "फू [foo.bar]" जैसे नाम में उस बिंदु को _ द्वारा प्रतिस्थापित नहीं किया जाता है!

मेरा निष्कर्ष: आप डॉट्स का उपयोग कर सकते हैं, लेकिन मैं इसका उपयोग नहीं करूंगा क्योंकि इससे इस्तेमाल किए गए HTTP सर्वर के आधार पर कुछ अप्रत्याशित व्यवहार हो सकते हैं


क्या होता है? अगर मैं नाम = "फू बार" का उपयोग करता हूं।
स्क्वील

0

क्या आप HTML इनपुट टैग की आईडी और नाम विशेषताओं का मतलब है?

यदि ऐसा है, तो मैं केवल (az (AZ), 0-9 और "विराम चिह्न" (",", ",", आदि) की सीमित श्रेणी में "इनपुट" नाम वर्णों को प्रतिबंधित (या रूपांतरित) करने की अनुमति देता हूं। यदि केवल XSS कारनामे की क्षमता को सीमित करने के लिए, आदि।

इसके अतिरिक्त, उपयोगकर्ता इनपुट टैग के किसी भी पहलू को नियंत्रित क्यों करते हैं? (इनपुट टैग नाम 'custom_1', 'custom_2', इत्यादि रखने के लिए एक सत्यापन परिप्रेक्ष्य से अंततः यह आसान नहीं हो सकता है और फिर आवश्यकतानुसार इन्हें मैप कर सकते हैं।)


हो सकता है कि मैं इस तरह से अपने नाम उत्पन्न न करूं। मैं फार्म फ़ील्ड को निर्दिष्ट करने के लिए अपने कार्यालय में कम तकनीक-प्रेमी सदस्यों को अनुमति देने के तरीकों के माध्यम से सोचने की कोशिश कर रहा हूं।
DLH

@DLH मुझे ऊपर के रूप में सिर्फ एक मध्यवर्ती दृष्टिकोण के लिए (नाम के टकराव आदि के जोखिम को दूर करने के लिए) लुभाया जाएगा। :-)
जॉन पार्कर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.