java - ترميز وفك رموز عناوين ورل rfc2396




(3)

ما هي أفضل طريقة لترميز سلاسل عناوين ورل بحيث تكون متوافقة مع rfc2396 وفك تشفير سلسلة متوافقة rfc2396 بحيث يتم استبدال٪ 20 على سبيل المثال بحرف مسافة؟

تحرير: أورلينكودر و أورلدكودر الطبقات لا ترميز / فك رموز rfc2396 عناوين ورل المتوافقة، فإنها ترميز إلى نوع مايم من تطبيق / x-ووو-فورم-أورلنكوديد الذي يستخدم لتشفير بيانات معلمة شكل هتمل.



يجب أن تكون أجزاء المكون، التي يحتمل أن تحتوي على أحرف يجب أن يتم هروبها، قد تم بالفعل هروبها باستخدام أورلنكودر قبل أن يتم تسلسلها إلى عنوان أوري.

إذا كان لديك عنوان أوري يحتوي على أحرف خارج النطاق (مثل المساحة، "<> [] {} \ | ^`، و بايت غير أسي)، فإنه ليس حقا عنوان أوري، يمكنك محاولة إصلاحها بواسطة يدويا٪ -caping لهم، ولكن هذه هي عملية إصلاح الأخير خندق وليس شكل قياسي من الترميز.هذا عادة ما يكون ضروريا عندما كنت تقبل أوريس يحتمل أن تكون مشوهة من إدخال المستخدم، ولكنها ليست عملية موحدة وأنا لا 't معرفة أي المدمج في وظيفة مكتبة جافا من شأنها أن تفعل ذلك بالنسبة لك؛ قد تضطر إلى الإختراق شيء ما لنفسك مع ريجيكس.

في الاتجاه الآخر، يجب أن تأخذ عنوان أوري الخاص بك إلى أجزاءه المكونة (كل جزء مسار منفصل واسم معلمة الاستعلام والقيمة وما إلى ذلك) قبل أن تتمكن من إلغاء فك كل جزء (باستخدام أورديكودر). ليس هناك طريقة معقولة ل٪ -decode أوري كله دفعة واحدة. يمكن أن تحاول "فك رموز٪ -escapes التي لا فك رموز إلى المحددات" (مثل /؟ = &؛٪) ولكن كنت قد تركت مع سلسلة غير متناسقة غريب لا يتوافق مع أي معيار معالجة أوري.

أورلنكودر / أورلدكودر على ما يرام للتعامل مع مكونات الاستعلام أوري، كل من الأسماء والقيم. ومع ذلك فهي ليست صحيحة تماما للتعامل مع مكونات جزء المسار أوري. الفرق هو أن الحرف '+' لا يعني مساحة في جزء المسار. يمكنك إصلاح هذا الأمر باستخدام سلسلة بسيطة محل: بعد أورلينكودينغ، استبدل '+' ب '٪ 20'؛ قبل ورلديكودينغ، استبدل '+' ب '٪ 2B'. يمكنك تجاهل الفرق إذا كنت لا تخطط لتشمل شرائح تحتوي على مسافات أو إضافات في المسار الخاص بك.


استخدم فئة أوري كما يلي:

URI uri = new URI("http", "//www.someurl.com/has spaces in url", null);
URL url = uri.toURL();

أو إذا كنت ترغب في سلسلة:

String urlString = uri.toASCIIString();




rfc2396