سؤال

ما هي الأحرف المسموح بها في الحصول على معلمات دون ترميز أو الهروب منها؟ أعني شيئا مثل هذا:

http://www.example.org/page.php؟name=xyz.

ماذا يمكنك أن يكون هناك بدلا من xyz؟ أعتقد فقط الأحرف التالية:

  • AZ (AZ)
  • 0-9
  • -
  • _

هل هذه هي القائمة الكاملة أم أن هناك أحرف إضافية مسموح بها؟

آمل أن تتمكن من مساعدتي. شكرا مقدما!

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

المحلول

هناك الأحرف المحجوزة, ، التي تحتوي على معاني محجوزة، هؤلاء المحاسومون - :/?#[]@ - ومدفو !$&'()*+,;=

هناك أيضا مجموعة من الشخصيات تسمى الأحرف غير المحفظة - alphanumerics و -._~ - والتي لا ينبغي تشفيرها.

هذا يعني أن من المفترض أن يكون أي شيء لا ينتمي إلى مجموعة أحرف غير محفوظة مئوية، عندما لا يكون لديهم معنى خاص (على سبيل المثال عندما تمر كجزء من GET معامل).

أنظر أيضا RFC3986: معرف موحد موحد (URI): بناء جملة عام

نصائح أخرى

يسأل السؤال الأحرف التي هي يسمح في الحصول على المعلمات دون تشفير أو الهروب منها.

وفق RFC3986. (بناء جملة عنوان URL العام) و RFC7230، القسم 2.7.1 (بناء جملة URL HTTP / S) الأحرف الوحيدة التي تحتاجها إلى ترميز النسبة المئوية هي تلك الموجودة خارج استفسار مجموعة، انظر التعريف أدناه.

ومع ذلك، هناك مواصفات إضافية مثل HTML5، أشكال الويب، والبحث المفهرس المفهرس, توصية W3C. هذه المستندات تضيف معنى خاصا لبعض الأحرف بشكل خاص، لرموز مثل = & + ;.

تشير الإجابات الأخرى هنا إلى أنه ينبغي تشفير معظم الشخصيات المحجوزة أو بما في ذلك "/" "؟ هذا غير صحيح. حقيقة، RFC3986، القسم 3.4 تنصح ضد ترميز النسبة المئوية "/"؟ " الشخصيات.

من الأفضل أحيانا استخدام قابلية الاستخدام لتجنب ترميز هذه الشخصيات.

يحدد RFC3986 مكون الاستعلام باسم:

query       = *( pchar / "/" / "?" )
pchar       = unreserved / pct-encoded / sub-delims / ":" / "@"
pct-encoded = "%" HEXDIG HEXDIG
sub-delims  = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
unreserved  = ALPHA / DIGIT / "-" / "." / "_" / "~" 

يتم استخدام آلية ترميز النسبة المئوية لتمثيل ثماني بيانات في مكون عند تلك الشخصية المقابلة للثمانية خارج المجموعة المسموح بها أو يتم استخدامها كحدد من المكون أو الداخل.

الاستنتاج هو أن جزء XYZ يجب أن ينفهر:

special: # % = & ;
Space
out of query set: [ ]
non ASCII encodable characters

ما لم يكن رموز خاصة = &؛ نكون مفتاح = القيمة فواصل.

يسمح بترميز الأحرف الأخرى ولكن ليس ضروريا.

من RFC 1738. على أي شخصيات مسموح بها في عناوين URL:

يمكن استخدام الأحرف الخاصة فقط والأحرف الخاصة "$ -_. +!" () "()" ()، والأحرف المحجوزة المستخدمة لأغراضهم المحجوزة غير مقصودة داخل عنوان URL.

الأحرف المحجوزة هي "؛"، "/"، "،"، ":"، "،"، "@"، "=" و "" و ""، مما يعني أنك ستحتاج إلى عرض URL إذا كنت ترغب في استخدامها.

الأحرف الأبجدية الرقمية وكلها

~ - _ . ! * ' ( ) ,

صالحة داخل عنوان URL.

يجب ترميز جميع الشخصيات الأخرى.

فعلت اختبار باستخدام شريط عنوان الكروم و $QUERY_STRING في باش، ولاحظ ما يلي:

~!@$%^&*()-_=+[{]}\|;:',./? و grave (backtick) يتم تمريرها من خلال كائن.

, ", < و > يتم تحويلها إلى %20, %22, %3C و %3E على التوالى.

# يتم تجاهلها، لأنه يستخدم من قبل مذيع الأخبار.

شخصيا، أود أن أقول لدغة الرصاصة وترميز مع base64 :)

يتم تحديد جميع القواعد المتعلقة بترميز URIS (والتي تحتوي على urns و url) في RFC1738 و RFC3986، إليك TL؛ دكتور من هذه المستندات الطويلة والمملة:

ترميز النسبة المئوية المعروفة أيضا باسم ترميز URL، هي آلية لترميز المعلومات في URI في ظل ظروف معينة. الأحرف المسموح بها في URI إما محجوزة أو غير محسوفة. الأحرف المحجوزة هي تلك الأحرف التي تحتوي في بعض الأحيان على معنى خاص، لكنها ليست الشخصيات الوحيدة التي تحتاج إلى تشفير.

هناك 66 حرفا غير محسوع لا يحتاج إلى أي ترميز:abcdefghiklmopqrstuvwABCDEFGHIKLMOPQRSTUVWXYZ0123456789-_.~

هناك 18 حرفا محجوزا يجب ترميزه: !*'();:@&=+$,/?#[], ، يجب ترميز جميع الشخصيات الأخرى.

إلى النسبة المئوية - تشفير شخصية، قم ببساطة بسلسلة "٪" وقيمة ASCII الخاصة بها في السداسي عشري. وظائف PHP "Urlencode" و "Railurlencode" تفعل هذه الوظيفة لك.

"." | "!" | "~" | "*" | "'" | "(" | ")" كما هو مقبول RFC2396. وبعد حقا، يمكن أن يكون أي شيء في معلمة Get إذا تم ترميزه بشكل صحيح.

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