java - জাভা ইউআরএল কোয়েরি স্ট্রিং পরামিতি এনকোডিং




http url (6)

  1. এটি ব্যবহার করুন: URLEncoder.encode (ক্যোয়ারী, স্ট্যান্ডার্ডচারসেট.UTF_8.displayName ()); অথবা এই: URLEncoder.encode (ক্যোয়ারী, "UTF-8");
  2. আপনি follwing কোড ব্যবহার করতে পারেন।

    String encodedUrl1 = UriUtils.encodeQuery(query, "UTF-8");//not change 
    String encodedUrl2 = URLEncoder.encode(query, "UTF-8");//changed
    String encodedUrl3 = URLEncoder.encode(query, StandardCharsets.UTF_8.displayName());//changed
    
    System.out.println("url1 " + encodedUrl1 + "\n" + "url2=" + encodedUrl2 + "\n" + "url3=" + encodedUrl3);

বলুন আমি একটি ইউআরএল আছে

http://example.com/query?q=

এবং আমি ব্যবহারকারীর দ্বারা প্রবেশ করা একটি প্রশ্ন আছে যেমন:

র্যান্ডম শব্দ £ 500 ব্যাংক $

আমি ফলাফল সঠিকভাবে এনকোড করা URL হতে চাই:

http://example.com/query?q=random%20word%20%A3500%20bank%20%24

এই অর্জন করার সেরা উপায় কি? আমি URLEncoder এবং URI / ইউআরএল অবজেক্ট তৈরি করার চেষ্টা URLEncoder কিন্তু তাদের মধ্যে কোনও সঠিকভাবে আসে নি।


অ্যান্ড্রয়েডে আমি এই কোডটি ব্যবহার করবো:

Uri myUI = Uri.parse ("http://example.com/query").buildUpon().appendQueryParameter("q","random word A3500 bank 24").build();

যেখানে Uri একটি android.net.Uri


আপনাকে প্রথমে একটি ইউআরআই তৈরি করতে হবে:

    String urlStr = "http://www.example.com/CEREC® Materials & Accessories/IPS Empress® CAD.pdf"
    URL url= new URL(urlStr);
    URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());

তারপর উরিকে ASCII স্ট্রিং রূপান্তর করুন:

    urlStr=uri.toASCIIString();

এখন আপনার ইউআরএল স্ট্রিং পুরোপুরি এনকোড করা হয়েছে আমরা সহজ ইউআরএল এনকোডিং করেছি এবং তারপর আমরা এটি ASCII স্ট্রিং রূপান্তরিত করেছি যাতে এটি নিশ্চিত করা যায় যে US-ASCII এর বাইরে কোনো চরিত্র স্ট্রিংয়ে অবশিষ্ট নেই। এই ঠিক কিভাবে ব্রাউজার করবেন।


আমি URLEncoder ব্যবহার করবে না। ভুলভাবে নামকরণ করা ছাড়াও ( URLEncoder এর URL গুলির সাথে কিছুই করার নেই), অক্ষম (এটি StringBuffer বদলে StringBuffer ব্যবহার করে এবং ধীর গতির অন্যান্য কয়েকটি জিনিস ব্যবহার করে) এটির StringBuffer করা খুব সহজ।

পরিবর্তে আমি URIBuilder বা Spring এর org.springframework.web.util.UriUtils.encodeQuery বা Commons Apache HttpClient । কারণটি আপনাকে পরামিতি মানের চেয়ে পৃথকভাবে কোয়েরি প্যারামিটার নামগুলি (অর্থাৎ বালুসিসের উত্তর q ) থেকে পালাতে হবে।

উপরে উল্লিখিত (শুধুমাত্র যে আমি বেদনাদায়কভাবে খুঁজে পেয়েছি) কেবলমাত্র ইউআরআইগুলির একটি সত্য উপসেট নয়

কোডের উদাহরণ:

import org.apache.http.client.utils.URIBuilder;

URIBuilder ub = new URIBuilder("http://example.com/query");
ub.addParameter("q", "random word £500 bank \$");
String url = ub.toString();

// Result: http://example.com/query?q=random+word+%C2%A3500+bank+%24

যেহেতু আমি শুধু অন্য উত্তরের সাথে সংযুক্ত করছি আমি এটি একটি সম্প্রদায় উইকি হিসাবে চিহ্নিত করেছি। সম্পাদনা করতে বিনা দ্বিধায়।



নিম্নোক্ত স্ট্যান্ডার্ড জাভা সমাধানটি ব্যবহার করুন ( ওয়েব প্ল্যাটফর্ম পরীক্ষায় প্রদত্ত 100 টি টেস্টকেস পাস করে):

0. ইউআরএল ইতিমধ্যে এনকোড করা হয় তাহলে পরীক্ষা করুন । '% 20' এনকোডেড স্পেস দিয়ে '+' এনকোড স্পেসগুলি প্রতিস্থাপন করুন।

1. স্ট্রাকচারাল অংশে ইউআরএল বিভক্ত। এটি জন্য java.net.URL ব্যবহার করুন।

2. সঠিকভাবে প্রতিটি কাঠামোগত অংশ এনকোড!

3. IDN.toASCII(putDomainNameHere) ব্যবহার করুন IDN.toASCII(putDomainNameHere) Punycode হোস্ট নাম এনকোড!

4. java.net.URI.toASCIIString() থেকে শতাংশ-এনকোড ব্যবহার করুন, এনএফসি এনকোডেড ইউনিকোড - (ভাল হবে NFKC!)। আরও তথ্যের জন্য দেখুন: সঠিকভাবে এই ইউআরএল এনকোড কিভাবে

URL url= new URL("http://example.com/query?q=random word £500 bank $");
URI uri = new URI(url.getProtocol(), url.getUserInfo(), IDN.toASCII(url.getHost()), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
String correctEncodedURL=uri.toASCIIString(); 
System.out.println(correctEncodedURL);

ছাপে

http://example.com/query?q=random%20word%20%C2%A3500%20bank%20$

এখানে কিছু উদাহরণ যা সঠিকভাবে কাজ করবে

{
      "in" : "http://نامه‌ای.com/",
     "out" : "http://xn--mgba3gch31f.com/"
},{
     "in" : "http://www.example.com/‥/foo",
     "out" : "http://www.example.com/%E2%80%A5/foo"
},{
     "in" : "http://search.barnesandnoble.com/booksearch/first book.pdf", 
     "out" : "http://search.barnesandnoble.com/booksearch/first%20book.pdf"
}, {
     "in" : "http://example.com/query?q=random word £500 bank $", 
     "out" : "http://example.com/query?q=random%20word%20%C2%A3500%20bank%20$"
}




urlencode