ডিকোডিউআরআইকিউম্পোনমেন্ট এবং ডিকোডুরির মধ্যে পার্থক্য কী?


উত্তর:


398

এই দুয়ের মাঝে পার্থক্য ব্যাখ্যা আমাকে মধ্যে পার্থক্য ব্যাখ্যা দিন encodeURIএবং encodeURIComponent

মূল পার্থক্য হ'ল:

  • encodeURIফাংশন পূর্ণ কোনো URI ব্যবহারের জন্য উদ্দীষ্ট।
  • encodeURIComponentফাংশন উপর .. ভাল .. কোনো URI উপাদান ব্যবহার করা যে কোনো অংশ দেয়ার উদ্দেশ্যে করা হচ্ছে যে বিভাজক মধ্যে মিথ্যা (; /: @ & =, + $, #?)।

সুতরাং, encodeURIComponentএই বিভাজকগুলিকে এনকোড করা হয়েছে কারণ এগুলি পাঠ্য হিসাবে বিবেচিত হয় এবং বিশেষ অক্ষর হিসাবে নয়।

ডিকোড ফাংশনগুলির মধ্যে পার্থক্য ফিরে আসার জন্য, প্রতিটি ফাংশন বিশেষ অক্ষরগুলির শব্দার্থবিজ্ঞানের যত্ন এবং তাদের পরিচালনার যত্ন নেওয়ার সাথে সংশ্লিষ্ট এনকোড অংশের দ্বারা উত্পাদিত স্ট্রিংগুলি ডিকোড করে।


4
আরেকটি অতীব গুরুত্বপূর্ণ পার্থক্য হল যে unescape বহু-বাইট হল UTF-8 সিকোয়েন্স হ্যান্ডেল নেই যেহেতু decodeURI [কম্পোনেন্ট] আছে:decodeURIComponent("%C3%A9") == "é"; unescape("%C3%A9") == "é";
ক্রিস

আইএমএইচও, কয়েকটি উদাহরণ দেওয়া খুব কার্যকর হবে

114

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

এনকোডিউরির কম সাধারণ, এবং বিভ্রান্তিকরভাবে নামকরণ করা হয়েছে: এটিকে সত্যই ফিক্স ব্রোকেনুরি বলা উচিত। এটি এমন কিছু লাগে যা প্রায় একটি ইউআরআই হয়ে থাকে তবে এতে ফাঁকা জায়গার মতো অবৈধ অক্ষর রয়েছে এবং এটিকে একটি সত্য ইউআরআইতে রূপান্তরিত করে। এটি ব্যবহারকারীর ইনপুট থেকে অবৈধ ইউআরআই ঠিক করার ক্ষেত্রে বৈধ ব্যবহার রয়েছে এবং এটি আইআরআই (খালি ইউনিকোড অক্ষরযুক্ত ইউআরআই) একটি সরল ইউআরআইতে রূপান্তর করতেও ব্যবহার করা যেতে পারে (নন-এএসসিআইআই এনকোড করার জন্য% -caped UTF-8 ব্যবহার করে) )।

ডিকোডিউরি কয়েকটি বিশেষ অক্ষর বাদে ডিকোডেরিউরিওকপোয়েন্ট হিসাবে একই অক্ষরগুলি ডিকোড করে। এটি এনকোডুরির বিপরীতমুখী হিসাবে সরবরাহ করা হয়, তবে আপনি এখনও এটির উপর নির্ভর করতে পারবেন না যে আপনি মূলত যা রেখেছেন - যেমন দেখুন।decodeURI(encodeURI('%20 '));

যেখানে এনকোডুরির সত্যই নামকরণ করা উচিত ফিক্স ব্রোকেনুরি (), ডিকোডুরি ()) সমানভাবে সম্ভাব্যব্রেকমাইপ্রিয়ালি ওয়ার্কুরিউরি () বলা যেতে পারে। আমি এর জন্য কোনও বৈধ ব্যবহারের কথা ভাবতে পারি না; এড়াতে.


11
ডিকোডুরি (এনকোডুরি ('% 20')) 'ক্রোম এবং ফায়ারফক্সে সঠিকভাবে'% 20 'দেয়, আপনি কেবল কোন ব্রাউজার / সংস্করণ থেকে ভুল ফলটি দেখেছেন তা ভাবছেন?
ccppjava

1
২০০৯ এ ভেঙে যেতে পারে তবে আধুনিক ব্রাউজারটি এর মধ্যেই ধরা পড়ে (আমার ধারণা)।
উড্রোশিগেরু

68
js> s = "http://www.example.com/string with + and ? and & and spaces";
http://www.example.com/string with + and ? and & and spaces
js> encodeURI(s)
http://www.example.com/string%20with%20+%20and%20?%20and%20&%20and%20spaces
js> encodeURIComponent(s)
http%3A%2F%2Fwww.example.com%2Fstring%20with%20%2B%20and%20%3F%20and%20%26%20and%20spaces

দেখে মনে হচ্ছে encodeURIশূণ্যস্থান এবং কিছু অন্যান্য (উদাহরণস্বরূপ অ-প্রিন্টযোগ্য) অক্ষরগুলি encodeURIComponentএনকোড করে একটি "নিরাপদ" ইউআরআই তৈরি করে, যেখানে অতিরিক্তভাবে কোলন এবং স্ল্যাশ এবং প্লাস অক্ষরগুলি এনকোড করে থাকে এবং এটি ক্যোয়ারী স্ট্রিংগুলিতে ব্যবহৃত হয়। এর এনকোডিং + এবং? এবং & এখানে বিশেষ গুরুত্ব রয়েছে, কারণ এগুলি ক্যোয়ারী স্ট্রিংয়ের বিশেষ অক্ষর।


30

যেহেতু আমার একই প্রশ্ন ছিল, কিন্তু এখানে উত্তরটি খুঁজে পেলাম না, আমি পার্থক্যটি আসলে কী তা নির্ধারণ করার জন্য কিছু পরীক্ষা করেছি। আমি এটি করেছি, যেহেতু আমার কোনও কিছুর জন্য এনকোডিং দরকার, যা ইউআরএল / ইউআরআই সম্পর্কিত নয়।

  • encodeURIComponent("A") "A" প্রদান করে, এটি "A" কে "% 41" এ এনকোড করে না
  • decodeURIComponent("%41") "এ" প্রদান করে।
  • encodeURI("A") "A" প্রদান করে, এটি "A" কে "% 41" এ এনকোড করে না
  • decodeURI("%41") "এ" প্রদান করে।

- এর অর্থ উভয়ই বর্ণানুক্রমিক অক্ষরগুলি ডিকোড করতে পারে যদিও তারা এগুলি এনকোড করে না। যাহোক...

  • encodeURIComponent("&") "% 26" প্রদান করে।
  • decodeURIComponent("%26") "&" প্রদান করে।
  • encodeURI("&") "&" প্রদান করে।
  • decodeURI("%26") "% 26" প্রদান করে।

যদিও এনকোডিউআরআইসি কম্পোনেন্টটি সমস্ত অক্ষরকে এনকোড করে না, ডিকোডিউআরআইসি কম্পোনেন্টটি% 00 এবং% 7F এর মধ্যে কোনও মান ডিকোড করতে পারে।

দ্রষ্টব্য: মনে হচ্ছে আপনি যদি% 7F এর উপরে কোনও মান ডিকোড করার চেষ্টা করেন (যদি না এটি একটি ইউনিকোড মান থাকে) তবে আপনার স্ক্রিপ্টটি "ইউআরআই ত্রুটি" দিয়ে ব্যর্থ হবে।


দ্রষ্টব্য: প্রথম ডিকোডেরিউআরকিউম্পোনমেন্টে একটি টাইপ রয়েছে (n এর পরিবর্তে মি)। আমি এটি সংশোধন করতে পারি না, কারণ আমাকে কমপক্ষে 6 টি অক্ষর সম্পাদনা করতে হবে।
সুপারনাভা

23

encodeURIComponent()

ইনপুটটিকে URL- এনকোড স্ট্রিংয়ে রূপান্তর করে

encodeURI()

ইউআরএল-ইনপুট ইনপুট করে তবে ধরে নেওয়া হয় যে একটি সম্পূর্ণ URL দেওয়া হয়েছে, সুতরাং প্রোটোকল (যেমন : http: // ) এবং হোস্টের নাম (যেমন www.stackoverflow.com ) এনকোড না করে একটি বৈধ URL প্রদান করে ।

decodeURIComponent()এবং decodeURI()উপরের বিপরীত হয়


12

ডিকোডিউআরআইকিউম্পোনেন্টটি ইউআরআই বিশেষ চিহ্নিতকারী যেমন &,?, #, ইত্যাদি হিসাবে ডিকোড করবে, ডিকোডিউরিআই করবে না।


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