سؤال

لدي بعض أكواد Java التي تستخدم Jakarta HttpClient مثل هذا:

URI aURI = new URI( "http://host/index.php?title=" + title + "&action=edit" );
GetMethod aRequest = new GetMethod( aURI.getEscapedPathQuery());

المشكلة هي أنه إذا title يتضمن أي علامات عطف (&)، فهي تعتبر محددات للمعلمات ويكون الطلب خاطئًا...وإذا قمت باستبدالها بما يعادل تخطي عنوان URL %26, ، ثم يتم الهروب المزدوج من خلال getEscapedPathQuery() إلى %2526.

أنا أعمل حاليًا على حل هذه المشكلة عن طريق إصلاح الضرر بعد ذلك:

URI aURI = new URI( "http://host/index.php?title=" + title.replace("&", "%26") + "&action=edit" );
GetMethod aRequest = new GetMethod( aURI.getEscapedPathQuery().replace("%2526", "%26"));

لكن هناك لديه لتكون طريقة أجمل للقيام بذلك، أليس كذلك؟لاحظ أن العنوان يمكن أن يحتوي على أي عدد من أحرف UTF-8 غير المتوقعة وما إلى ذلك، لذا يعد الهروب من كل شيء آخر أمرًا ضروريًا.

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

المحلول

ها أنت ذا:

import java.net.URLEncoder;
...
...
URI aURI = new URI( "http://host/index.php?title=" + URLEncoder.encode(title,"UTF-8") + "&action=edit" );
GetMethod aRequest = new GetMethod( aURI.getPathQuery());

يفحص java.net.urlencoder لمزيد من المعلومات.

نصائح أخرى

لماذا تتصل بـ getSeScapedPathquery () إذا كنت لا تريد الهروب؟ فقط قرر من مسؤولية ذلك ويكون متسقًا.

استخدم ال URLEncoder فصل.

فئة الأداة المساعدة لترميز نموذج HTML.تحتوي هذه الفئة على طرق ثابتة لتحويل سلسلة إلى تنسيق MIME/X-WWW-Form-Form-Form-Form-Form.لمزيد من المعلومات حول تشفير نموذج HTML ، راجع مواصفات HTML.

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