এনকোডিং ইউআরএলগুলির জন্য আমার কী এনকোডুরি বা এনকোডিউরিক কম্পোনেন্ট ব্যবহার করা উচিত?


281

ইউএনএল কোডিংয়ের জন্য এই দুটি পদ্ধতির মধ্যে কোনটি ব্যবহার করা উচিত?


3
আরো দেখুন stackoverflow.com/a/3608791/632951
Pacerier

13
একটি প্রধান পার্থক্য হ'ল encodeURIএনকোড হবে না /: encodeURIComponent("ac/dc")=> ac%2Fdcএবং encodeURI("ac/dc")=>ac/dc

এটি সহায়ক হতে পারে: "encodeURIComponent() and encodeURI() encode a URI by replacing URL reserved characters with their UTF-8 encoding....They differ because encodeURI does not encode queryString or hash values...URLs do not allow many special characters, like spaces or slashes. However these special characters are part of life, so URL encoding was invented." উত্স
ব্যবহারকারী 1063287

এছাড়াও শিরোনামে নির্দিষ্ট বিভাগটি দেখুন encodeURIComponent differs from encodeURI as follows: বিকাশকারী.মোজিলা.আর.ইন-
ইউএস

উত্তর:


324

এটি আসলে আপনি কী করতে চাইছেন তার উপর নির্ভর করে।

এনকোডুরি অনুমান করে যে ইনপুটটি একটি সম্পূর্ণ ইউআরআই যাতে কিছু অক্ষর থাকতে পারে যার মধ্যে এনকোডিং দরকার need

এনকোডিউআরআইকিউম্পোনেন্ট প্রতিটি অর্থকে বিশেষ অর্থ সহ এনকোড করবে, সুতরাং আপনি এটি ইউআরআই এর উপাদানগুলির জন্য ব্যবহার করুন

var world = "A string with symbols & characters that have special meaning?";
var uri = 'http://example.com/foo?hello=' + encodeURIComponent(world);

108

আপনি যদি কোনও ইউআরএল উপাদান (একটি ক্যোরিস্ট্রিং প্যারামিটার) রাখার জন্য একটি স্ট্রিং এনকোড করছেন, আপনার কল করা উচিত encodeURIComponent

যদি আপনি একটি বিদ্যমান ইউআরএল এনকোড করছেন, কল করুন encodeURI


1
যদি আমি এজ্যাক্স ব্যবহার করছি তবে পিএইচপি পাস হওয়া ইউআরএলকে আমি কীভাবে ডিকোড করব?
আদিত্য শুক্ল

6
আপনি না। ওয়েবসভারটি স্বয়ংক্রিয়ভাবে তা করে।
কুইন্টিন

@ আদিত্য: আপনি যা করছেন তা নির্ভর করে।
স্ল্যাक्स

@ স্ল্যাকস .আমি পেয়েই পরামিতিগুলি পার করছি তাই আমি পিএইচপি তে তাদের পুনরুদ্ধার করতে চাই।
আদিত্য শুক্ল

2
আমরা হব. আমি যখন ওয়েব সার্ভারটি এটি করবে তখন আমি কিছুটা তাড়াহুড়ো করে কথা বলতে পারি, তবে আপনি আপনার ফর্ম ডেটা পড়ার জন্য যে লাইব্রেরি ব্যবহার করবেন তা আপনার যত্ন নেবে।
কোয়ান্টিন

46

xkr.us উদাহরণ সহ একটি দুর্দান্ত আলোচনা আছে। তাদের সংক্ষিপ্ত উদ্ধৃতি:

এস্কেপ () পদ্ধতিটি + টি অক্ষরকে এনকোড করে না যা সার্ভারের পাশের একটি স্থান হিসাবে ব্যাখ্যা করা হয় পাশাপাশি তাদের ক্ষেত্রগুলির ফাঁকা স্থান সহ ফর্মগুলির দ্বারা উত্পন্ন হয়। এই ত্রুটি এবং এই ফাংশনটি অ-এএসসিআইআই অক্ষরগুলি সঠিকভাবে পরিচালনা করতে ব্যর্থ হওয়ার কারণে, যখনই সম্ভব আপনার পলায়নের ব্যবহার এড়ানো উচিত ()। সর্বোত্তম বিকল্প হ'ল এনকোডিউআরআইসি কম্পোনেন্ট ()।

এসেস্ক () এনকোড করবে না: @ * / +

এনকোডুরি () পদ্ধতির ব্যবহার পলায়নের চেয়ে কিছুটা বেশি বিশেষায়িত () যা এটি ইউআরআইয়ের জন্য এনকোড করে ক্যোরিস্ট্রিংয়ের বিপরীতে, যা কোনও URL এর অংশ of আপনি যখন ইউআরআই ব্যবহার করেন এবং আন-এনকোডে থাকার জন্য নির্দিষ্ট অক্ষরগুলির প্রয়োজন হয় এমন কোনও সংস্থার জন্য যখন স্ট্রিংটি এনকোড করা দরকার তখন এই পদ্ধতিটি ব্যবহার করুন। নোট করুন যে এই পদ্ধতিটি 'অক্ষরটিকে এনকোড করে না, কারণ এটি ইউআরআইয়ের মধ্যে বৈধ অক্ষর।

এনকোডুরি () এনকোড করবে না: ~! @ # $ & * () =: /,;? + '

সবশেষে, ইউআরআইয়ের একক উপাদানকে এনকোড করার সময় এনকোডিউআরআইকিউম্পোন্ট () পদ্ধতিটি বেশিরভাগ ক্ষেত্রেই ব্যবহার করা উচিত। এই পদ্ধতিটি এমন কয়েকটি অক্ষরকে এনকোড করবে যা সাধারণত ইউআরআইয়ের জন্য বিশেষ চর হিসাবে স্বীকৃত হয় যাতে অনেকগুলি উপাদান অন্তর্ভুক্ত থাকতে পারে। নোট করুন যে এই পদ্ধতিটি 'অক্ষরটিকে এনকোড করে না, কারণ এটি ইউআরআইয়ের মধ্যে বৈধ অক্ষর।

এনকোডিউআরআইকিউম্পোনমেন্ট () এনকোড করবে না: ~! * () '


সম্প্রতি শিখেছি। টমক্যাট 9 সার্ভারগুলি আপনি ইউআরএলে কী পাঠাতে পারবেন সে সম্পর্কে আরও বিশেষ are আপনার এনকোডিংয়ের ক্ষেত্রে "স্পেস" রয়েছে এমন ক্ষেত্রে এনকোডিউআরআইকিউম্পোনেন্ট () আরও ভালভাবে কাজ করবে বলে মনে হচ্ছে। টমকেট 8 যত্নশীল না তবে 9 উপায়টি আরও বিশেষ।
87

সুতরাং অন্য কথায় encodeURIব্যর্থ হয় যদি আপনি কোনও ফাইলের নাম একটি ইউআরএল রূপান্তর করতে চেষ্টা করেন এবং ফাইলের নাম #এতে থাকে
gman

17

এখানে একটি সংক্ষিপ্তসার।

  1. এস্কেপ () এনকোড করবে না /

    এটা ব্যবহার করোনা.

  2. এনকোডুরি () এজেড এজেড 0-9 এনকোড করবে না; , /? : @ & = + $ - _। ! ~ * '() #

    আপনার ইনপুটটি যখন https://searchexample.com/search?q=wiki 'র মতো সম্পূর্ণ URL হয় তখন এটি ব্যবহার করুন

  3. এনকোডিউআরআইকিউম্পোনমেন্ট () এজেড এজেড 0-9 - _ এনকোড করবে না। ! ~ * '() আপনার ইনপুট যখন সম্পূর্ণ ইউআরএল এর অংশ হয় তখন এটি ব্যবহার করুন const queryStr = encodeURIComponent(someString)

1
এটি একটি দুর্দান্ত উত্তর কারণ তারা ঠিক কী করে তা এটি বলে। তবে আমার এখনও কোন প্রশ্ন ব্যবহার করা উচিত এবং কখন তা ব্যবহার করা উচিত। আমার ইউআরআই-কম্পোনেন্টটি যদি একটি সম্পূর্ণ ইউআরএল হয়? তারপরে আমি কি উপরের থেকে বিধি 2 বা বিধি 3 ব্যবহার করতে পারি অথবা সম্ভবত এনকোডিউআরআইকিউম্পোনেন্ট (এনকোডুরি (দ্য কমলিউটারি)) এর মতো দুটি ব্যবহার করতে পারি
পানু লজিক

10

এনকোডিউআরআইকিউম্পোনেন্ট (): ধরে নিয়েছে যে এর যুক্তিটি একটি ইউআরআইয়ের একটি অংশ (যেমন প্রোটোকল, হোস্টনাম, পাথ, বা কোয়েরি স্ট্রিং)। সুতরাং এটি বিরামচিহ্নগুলি অক্ষরগুলি থেকে বেরিয়ে যায় যা ইউআরআইয়ের অংশগুলি পৃথক করতে ব্যবহৃত হয়।

এনকোডুরি (): বিদ্যমান ইউআরএল এনকোডিংয়ের জন্য ব্যবহৃত হয়


7

encodeURIএবং এর মধ্যে পার্থক্য encodeURIComponent:

encodeURIComponent(value)মূলত ক্যোরিস্ট্রিং প্যারামিটার মানগুলি এনকোড করতে ব্যবহৃত হয় এবং এটি প্রতিটি প্রযোজ্য অক্ষরকে এনকোড করে valueencodeURIপ্রোটোকল উপসর্গ ( http://) এবং ডোমেন নাম উপেক্ষা করে ।


খুব, খুব বিরল ক্ষেত্রে যখন আপনি অতিরিক্ত অক্ষরগুলি এনকোড করার জন্য ম্যানুয়াল এনকোডিংটি প্রয়োগ করতে চান (যদিও এগুলি সাধারণত সাধারণত ক্ষেত্রে এনকোড করার প্রয়োজন হয় না): ! *তবে আপনি ব্যবহার করতে পারেন:

function fixedEncodeURIComponent(str) {
  return encodeURIComponent(str).replace(/[!*]/g, function(c) {
    return '%' + c.charCodeAt(0).toString(16);
  });
}

( উত্স )


6
ইউআরএলগুলিতে আপনার এই চরিত্রগুলি এড়ানো উচিত নয়।
আরশসফট

উদ্ধৃত নথি হিসাবে বলা হয়েছে: "এই চরিত্রগুলির কোনও আনুষ্ঠানিকভাবে ইউআরআই
সীমানা

@ Caesarsol তাই, আমার উত্তরটি সম্পাদনা করা উচিত। আমাকে আপনার চিন্তাভাবনা
জানাবেন


2

অন্যান্য উত্তরগুলি উদ্দেশ্যগুলি বর্ণনা করে। প্রতিটি ফাংশন আসলে রূপান্তরিত করবে এমন অক্ষর এখানে রয়েছে :

control = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F'
        + '\x10\x11\x12\x13\x14\X15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F'
                                                                    + '\x7F'
encodeURI         (control + ' "%<>[\\]^`{|}'                             )
encodeURIComponent(control + ' "%<>[\\]^`{|}' + '#$&,:;=?' + '+/@'        )
escape            (control + ' "%<>[\\]^`{|}' + '#$&,:;=?' +       "!'()~")

উপরের সমস্ত অক্ষর শতাংশ-হেক্সাডেসিমাল কোডগুলিতে রূপান্তরিত হয়েছে। স্থান থেকে %20শতাংশ %25, ইত্যাদি below নীচের অক্ষরগুলি অপরিবর্তিত হয়ে যায়।

ফাংশন রূপান্তর করবে না এমন অক্ষরগুলি এখানে রয়েছে :

pass_thru = '*-._0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'

encodeURI         (pass_thru + '#$&,:;=?' + '+/@' + "!'()~")
encodeURIComponent(pass_thru +                      "!'()~")
escape            (pass_thru +              '+/@'          )

-4

সাধারণ নিয়ম হিসাবে ব্যবহার encodeURIComponent। এটি ব্যবহারে এটি আরও সুনির্দিষ্ট ভেবে দীর্ঘ নামটি সম্পর্কে ভয় পাবেন না, আমার কাছে এটি আরও বেশি ব্যবহৃত পদ্ধতি। এনকোডুরি ব্যবহার করেও সাফল্য অর্জন করবেন না কারণ আপনি এটি পরীক্ষা করেছেন এবং এটি সঠিকভাবে এনকোডিং করা হচ্ছে বলে মনে হচ্ছে, সম্ভবত আপনি এটি ব্যবহার করছেন বলে বোঝানো হয়নি এবং যদিও প্রথম নাম ক্ষেত্রের "ফ্রেড" ব্যবহার করে আপনার সাধারণ পরীক্ষাটি কাজ করেছে, আপনি পাবেন পরে যখন আপনি আরও উন্নত পাঠ্য ব্যবহার করেন যেমন একটি এম্পারস্যান্ড বা হ্যাশট্যাগ যুক্ত করে তবে এটি ব্যর্থ হবে। এটির কারণগুলির জন্য আপনি অন্যান্য উত্তরগুলি দেখতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.