ما هي الأحرف المسموح بها في سمة اسم HTML داخل علامة الإدخال؟

StackOverflow https://stackoverflow.com/questions/3424860

سؤال

لدي برنامج PHP النصي الذي سيتم إنشاؤه <input>ديناميكيًا، لذلك كنت أتساءل عما إذا كنت بحاجة إلى تصفية أي أحرف في ملف name يصف.

أعلم أن الاسم يجب أن يبدأ بحرف، لكن لا أعرف أي قواعد أخرى.أعتقد أنه يجب السماح بالأقواس المربعة، نظرًا لأن PHP تستخدمها لإنشاء صفائف من بيانات النموذج.ماذا عن الأقواس؟المساحات؟

هل كانت مفيدة؟

المحلول

التقييد الحقيقي الوحيد على الأحرف التي يمكن أن تظهر في أسماء التحكم في النماذج هو عندما يتم تقديم نموذج مع GET

تقيد طريقة "GET" قيم مجموعة بيانات النماذج لأحرف ASCII. " المرجعي

هناك موضوع جيد عليه هنا.

نصائح أخرى

لاحظ أنه لا يتم تقديم جميع الأحرف ل name سمات حقول النموذج (حتى عند استخدام Post)!

يتم قطع أحرف الفضاء الأبيض والأحرف الداخلية للفضاء الأبيض وكذلك الشخصية . يتم استبدالها _. (تم اختباره في Chrome 23 ، Firefox 13 و Internet Explorer 9 ، All Win7.)

أي حرف يمكنك تضمينه في ملف [X]HTML يعد أمرًا جيدًا لوضعه في ملف <input name>.وكما يقول تعليق ألين، <input name> يتم تعريفه على أنه يحتوي على CDATA, ، لذا فإن الأشياء الوحيدة التي لا يمكنك وضعها هناك هي رموز التحكم ونقاط التعليمات البرمجية غير الصالحة التي لا يسمح بها المعيار الأساسي (SGML أو XML).

اقتبس آلان W3 من مواصفات HTML4:

ملحوظة.تقوم طريقة "get" بتقييد قيم مجموعة بيانات النموذج بأحرف ASCII.يتم تحديد طريقة "النشر" فقط (مع enctype = "multipart/form-data") لتغطية مجموعة أحرف ISO10646 بالكامل.

ولكن هذا ليس صحيحا حقا في الممارسة العملية.

النظرية هي ذلك application/x-www-form-urlencoded لا تحتوي البيانات على آلية لتحديد ترميز لأسماء النموذج أو قيمه، لذا فإن استخدام أحرف غير ASCII في أي منهما "غير محدد" على أنه يعمل ويجب عليك استخدام POSTed multipart/form-data بدلاً من.

لسوء الحظ، في العالم الحقيقي، لا يوجد متصفح يحدد ترميزًا للحقول حتى لو كان ذلك ممكنًا نظريًا، في رؤوس الأجزاء الفرعية من ملف multipart/form-data نص طلب ما بعد.(أعتقد أن موزيلا حاولت تنفيذ ذلك مرة واحدة، لكنها تراجعت لأنها عطلت الخوادم.)

ولا يوجد متصفح ينفذ ما هو معقد وقبيح بشكل مدهش RFC2231 المعيار الذي سيكون ضروريًا لإدراج أسماء الحقول المشفرة غير ASCII في رؤوس الأجزاء الفرعية متعددة الأجزاء.على أية حال، مواصفات HTML هي التي تحدد multipart/form-data لا يقول بشكل مباشر أنه يجب استخدام RFC2231، ومرة ​​أخرى، سيؤدي ذلك إلى تعطيل الخوادم إذا حاولت.

لذا فإن حقيقة الموقف هي أنه لا توجد طريقة لمعرفة التشفير المستخدم للأسماء والقيم في إرسال النموذج، بغض النظر عن نوع النموذج.ما ستفعله المتصفحات بأسماء الحقول والقيم التي تحتوي على أحرف غير ASCII هو نفسه بالنسبة لـ GET وكلا النوعين من نموذج POST:يقوم بتشفيرها باستخدام ترميز الصفحة التي تحتوي على النموذج المستخدم.أسماء نماذج GET غير ASCII ليست أكثر من أي شيء آخر.

دي إل إتش:

إذن الاسم له نوع بيانات مختلف عما هو عليه بالنسبة للعناصر الأخرى؟

في الواقع العنصر الوحيد الذي name السمة ليست كذلك CDATA يكون <meta>.راجع مواصفات HTML4 قائمة السمات لجميع الاستخدامات المختلفة name;إنه اسم سمة مثقل، وله العديد من المعاني المختلفة على العناصر المختلفة.وهذا يعتبر بشكل عام أمرا سيئا.

ومع ذلك، عادةً ما تتجنب هذه الأيام name باستثناء حقول النموذج (حيث يكون اسم عنصر التحكم) و param (حيث يكون معرف معلمة خاص بالمكون الإضافي).هذا معنيان فقط يجب التعامل معهما.استخدام المدرسة القديمة name لتحديد عناصر مثل <form> أو <a> على الصفحة يجب تجنبه (استخدام id بدلاً من).

في حين أن تعليق Allain أجب على سؤال OP المباشر وقدم Bobince بعض المعلومات المتعمقة الرائعة ، أعتقد أن الكثير من الناس يأتون إلى هنا يبحثون عن إجابة على سؤال أكثر تحديداً: "هل يمكنني استخدام حرف DOT في سمة اسم إدخال النموذج؟"

عندما ظهر هذا الموضوع كنتيجة أولى عندما بحثت عن هذه المعرفة ، اعتقدت أنني قد أشارك ما وجدته.

أولاً ، ادعى ماتياس أن:

حرف . يتم استبدالها بـ _

هذا غير صحيح. لا أعرف ما إذا كان المتصفح قد قام بالفعل بهذا النوع من العمليات في عام 2013 - على الرغم من أنني أشك في ذلك. المستعرضات ترسل أحرف نقطة كما هي (الحديث عن البيانات بعد)! يمكنك التحقق من ذلك في أدوات المطورين من أي متصفح لائق.

من فضلك ، لاحظ أن تعليقًا صغيرًا صغيرًا من قبل Abluejelly ، ربما يفتقده الكثيرون:

أود أن ألاحظ أن هذا شيء خاص بالخادم ، وليس شيء متصفح. تم اختباره على Win7 FF3/3.5/31 ، IE5/7/8/9/10/حافة ، Chrome39 ، و Safari Windows 5 ، وكلهم أرسلوا "اختبار هذا. خادم ASP.NET DEV مجمعة مع VS2012.

لقد راجعت ذلك باستخدام Apache HTTP Server (v2.4.25) ويتم تغيير اسم الإدخال مثل "foo.bar" إلى "foo_bar". ولكن في اسم مثل "foo [foo.bar] لا يتم استبدال النقطة بـ _!

استنتاجي: يمكنك استخدام النقاط لكنني لن أستخدمها لأن هذا قد يؤدي إلى بعض السلوكيات غير المتوقعة اعتمادًا على خادم HTTP المستخدم.

هل تقصد سمات المعرف والاسم لعلامة إدخال HTML؟

إذا كان الأمر كذلك ، فسأكون مغريًا جدًا لتقييد (أو تحويل) أحرف اسم "الإدخال" في AZ (AZ) فقط ، 0-9 ومجموعة محدودة من علامات الترقيم ("." ، "، وما إلى ذلك) ، إذا فقط للحد من إمكانات مآثر XSS ، إلخ.

بالإضافة إلى ذلك ، لماذا تسمح للمستخدم بالتحكم في أي جانب من جوانب علامة الإدخال؟ (قد لا يكون الأمر أسهل في النهاية من منظور التحقق من الصحة للحفاظ على أسماء علامات الإدخال هي "Custom_1" ، "Custom_2" ، وما إلى ذلك ، ثم قم بتخطيطها كما هو مطلوب.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top