ইউআরএল প্যারামিটারগুলি কীভাবে এনকোড করা যায়?


123

আমি এমন একটি URL- এ পরামিতিগুলি প্রেরণের চেষ্টা করছি যা দেখে মনে হচ্ছে:

http://www.foobar.com/foo?imageurl=

এবং আমি এমন কোনও চিত্রের URL হিসাবে প্যারামিটারগুলি পাস করতে চাই যা অন্য এপিআই দ্বারা নিজেই উত্পন্ন হয় এবং চিত্রটির লিঙ্কটি এই রূপে সক্রিয় হয়:

http://www.image.com/?username=unknown&password=unknown

তবে, আমি যখন ইউআরএলটি ব্যবহার করার চেষ্টা করব:

http://www.foobar.com/foo?imageurl=http://www.image.com/?username=unknown&password=unknown

এটি কাজ করে না।

আমি ইমেজ ইউআরএল ব্যবহার encodeURI()এবং করার চেষ্টা করেছি এবং encodeURIComponent()এটিও কার্যকর হয় না।


কোন ভাষাটি ইউআরএল তৈরি করছে? জাভাস্ক্রিপ্ট?
ফিল

2
নোট করুন যে আপনার ইউআরএলগুলিতে পাসওয়ার্ড রাখা উচিত নয়, এমনকি https ব্যবহার করার সময় নয়, যেমন ক্লায়েন্ট এবং সার্ভারের মধ্যে প্রতিটি রাউটার পুরো url দেখতে পাবে।
ফাব

উত্তর:


171

পিএইচপি সহ

echo urlencode("http://www.image.com/?username=unknown&password=unknown");

ফলাফল

http%3A%2F%2Fwww.image.com%2F%3Fusername%3Dunknown%26password%3Dunknown

জাভাস্ক্রিপ্ট সহ:

var myUrl = "http://www.image.com/?username=unknown&password=unknown";
var encodedURL= "http://www.foobar.com/foo?imageurl=" + encodeURIComponent(myUrl);

ডেমো: http://jsfiddle.net/Lpv53/


37

নতুন ES6 ব্যবহার করে Object.entries(), এটি একটি মজাদার জন্য একটু বাসা বাঁধে map/ join:

const encodeGetParams = p => 
  Object.entries(p).map(kv => kv.map(encodeURIComponent).join("=")).join("&");

const params = {
  user: "María Rodríguez",
  awesome: true,
  awesomeness: 64,
  "ZOMG+&=*(": "*^%*GMOZ"
};

console.log("https://example.com/endpoint?" + encodeGetParams(params))


1

আপনি encodeURIComponent()বা ব্যবহার করা উচিত নয় encodeURI()। আপনার ব্যবহার করা উচিত fixedEncodeURIComponent()এবং fixedEncodeURI(), এমডিএন ডকুমেন্টেশন অনুসারে।

সম্পর্কিত encodeURI()...

যদি কেউ ইউআরএলগুলির জন্য আরও সাম্প্রতিক আরএফসি 3986 অনুসরণ করতে চায়, যা বর্গাকার বন্ধনীগুলিকে সংরক্ষিত করে (আইপিভি 6 এর জন্য) এবং এভাবে কোনও URL তৈরির সময় এনকোড না করা হয় (যেমন হোস্ট হিসাবে), নিম্নলিখিত কোড স্নিপেট সাহায্য করতে পারে:

function fixedEncodeURI(str) { return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']'); }

সম্পর্কিত encodeURIComponent()...

আরএফসি 3986 (যা রিজার্ভ!, ', (,), এবং *) মেনে চলা আরও কঠোর হতে, যদিও এই অক্ষরগুলির কোনও আনুষ্ঠানিকভাবে ইউআরআই সীমানা ব্যবহার না করে, নিম্নলিখিতগুলি নিরাপদে ব্যবহার করা যেতে পারে:

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

তাহলে পার্থক্য টা কি? fixedEncodeURI()এবং fixedEncodeURIComponent()মান একই সেট রূপান্তর কিন্তু fixedEncodeURIComponent()এই সেট পরিবর্তন করে: +@?=:*#;,$&। এই সেটটি GETপ্যারামিটারগুলিতে ( &, +ইত্যাদি) ব্যবহৃত হয় , অ্যাঙ্কর ট্যাগগুলি ( #), ওয়াইল্ডকার্ড ট্যাগ ( *), ইমেল / ব্যবহারকারীর অংশ ( @) ইত্যাদি ইত্যাদি etc

উদাহরণ হিসেবে বলা যায় - তাহলে আপনি ব্যবহার encodeURI(), user@example.com/?email=me@homeসঠিকভাবে দ্বিতীয় পাঠাব না @সার্ভারে, আপনার ব্রাউজার উপযুক্ততা পরিচালনা করার জন্য ব্যতীত (হিসাবে Chrome স্বাভাবিকভাবেই প্রায়ই না)।


আপনি কি বলতে চাইছেন "except for your browser handling the compatibility"?
স্টিফান

@ স্টেফান: উদাহরণস্বরূপ, যদি site.com?formula=a+b=cউত্পাদনে কাজ formula=>a+b=cকরে তবে তা অনুমানের লঙ্ঘন করে তবে যদি এটি কাজ করে তবে এটি ক্রোম / ইত্যাদি কারণে। ইউআরএল ইত্যাদির নির্দিষ্ট ব্যর্থতা ইত্যাদি সনাক্ত করতে পারে এবং ডাব্লু / user@site.com?email=user@site.com
হোল্ডঅফ হ্যাঞ্জার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.