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



http url (8)

URLEncoder যেতে উপায় হতে হবে। আপনি কেবলমাত্র পৃথক ক্যোয়ারী স্ট্রিং প্যারামিটার নাম এবং / অথবা মান এনকোড রাখতে হবে, সম্পূর্ণ URL টি নয়, নিশ্চিতভাবেই ক্যোয়ারী স্ট্রিং প্যারামিটার বিভাজক অক্ষর & না পরামিতি নাম-মান বিভাজক অক্ষর =

String q = "random word £500 bank $";
String url = "http://example.com/query?q=" + URLEncoder.encode(q, "UTF-8");

উল্লেখ্য যে কোয়েরি প্যারামিটারগুলিতে স্থানগুলি + দ্বারা উপস্থাপিত হয়, না %20 , যা বৈধভাবে বৈধ। %20 সাধারণত ইউআরআই-তে স্পেসগুলি উপস্থাপন করতে ব্যবহৃত হয় (ইউআরআই-ক্যোয়ারী স্ট্রিং বিভাজক চরিত্রের আগে অংশ ? ), ক্যোয়ারী স্ট্রিংয়ে নয় (পরে অংশ ? )।

এছাড়াও দুটি encode() পদ্ধতি আছে নোট করুন। এক সঙ্গে চার্জার যুক্তি এবং অন্য। অক্ষর যুক্তি ছাড়া এক অপসৃত হয়। এটি ব্যবহার করবেন না এবং সর্বদা অক্ষর যুক্তিটি নির্দিষ্ট করুন। URLEncoder এমনকি URLEncoder -8 এনকোডিং ব্যবহার করার জন্য স্পষ্টভাবে সুপারিশ করে যা RFC3986 এবং W3C দ্বারা RFC3986

অন্যান্য সমস্ত অক্ষরগুলি অনিরাপদ এবং প্রথমে কিছু এনকোডিং স্কিম ব্যবহার করে এক বা একাধিক বাইটে রূপান্তরিত হয়। তারপরে প্রতিটি বাইটটি 3-অক্ষর স্ট্রিং "% xy" দ্বারা উপস্থাপিত হয়, যেখানে xy বাইটের দুটি-সংখ্যার হেক্সাডেসিমাল উপস্থাপনা। ব্যবহার করার প্রস্তাবিত এনকোডিং প্রকল্পটি ইউটিএফ -8 । তবে, উপযুক্ততা কারণে, যদি একটি এনকোডিং নির্দিষ্ট না হয় তবে প্ল্যাটফর্মের ডিফল্ট এনকোডিং ব্যবহার করা হয়।

আরো দেখুন:

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

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

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

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

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

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

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



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

    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 এর বাইরে কোনো চরিত্র স্ট্রিংয়ে অবশিষ্ট নেই। এই ঠিক কিভাবে ব্রাউজার করবেন।


  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);

আমি 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

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


অ্যাপাচি এইচটিপি কম্পোনেন্ট গ্রন্থাগারগুলি বিল্ডিং এবং এনকোডিংয়ের ক্যোয়ারী প্যারামিটারগুলির জন্য একটি পরিচ্ছন্ন বিকল্প সরবরাহ করে -

HttpComponents 4.x ব্যবহার সঙ্গে - URLEncodedUtils

HttpClient 3.x ব্যবহারের জন্য - EncodingUtil


এখানে এমন একটি পদ্ধতি যা আপনি আপনার কোডে একটি url স্ট্রিং এবং পরামিতিগুলির মানচিত্রের একটি বৈধ এনকোডেড url স্ট্রিংয়ের সাথে ক্যোয়ারী প্যারামিটারগুলি রূপান্তর করতে ব্যবহার করতে পারেন।

String addQueryStringToUrlString(String url, final Map<Object, Object> parameters) throws UnsupportedEncodingException {
    if (parameters == null) {
        return url;
    }

    for (Map.Entry<Object, Object> parameter : parameters.entrySet()) {

        final String encodedKey = URLEncoder.encode(parameter.getKey().toString(), "UTF-8");
        final String encodedValue = URLEncoder.encode(parameter.getValue().toString(), "UTF-8");

        if (!url.contains("?")) {
            url += "?" + encodedKey + "=" + encodedValue;
        } else {
            url += "&" + encodedKey + "=" + encodedValue;
        }
    }

    return url;
}

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

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

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





urlencode