javascript - জাভাস্ক্রিপ্ট এনকোড URL?




encoding (9)

কিভাবে আপনি জাভাস্ক্রিপ্ট ব্যবহার করে একটি ইউআরএল নিরাপদে এনকোড করবেন যেমন এটি একটি জিইটি স্ট্রিং এ রাখা যায়?

var myUrl = "http://example.com/index.html?param=1&anotherParam=2";
var myOtherUrl = "http://example.com/index.html?url=" + myUrl;

আমি অনুমান করি যে আপনার দ্বিতীয় লাইনটিতে myUrl পরিবর্তনশীল এনকোড করতে হবে?


ইউআরএল এনকোডিং কি?

ইউআরএল ভিতরে অবস্থিত বিশেষ অক্ষর আছে যখন একটি URL এনকোড করা উচিত। উদাহরণ স্বরূপ:

console.log(encodeURIComponent('?notEncoded=&+'));

আমরা এই উদাহরণটি পর্যবেক্ষণ করতে পারি যে স্ট্রিং ছাড়া এনকোড করা সমস্ত অক্ষর% চিহ্নের সাথে এনকোড করা হয়। ইউআরএল এনকোডিংটি শতাংশ এনকোডিং হিসাবেও পরিচিত কারণ এটি% এর সমস্ত বিশেষ অক্ষর থেকে পালিয়ে যায়। তারপরে এই% চিহ্নের পর প্রত্যেক বিশেষ চরিত্রটিতে একটি অনন্য কোড থাকে

আমাদের কেন ইউআরএল এনকোডিং দরকার?

কিছু অক্ষর একটি URL স্ট্রিং একটি বিশেষ মান আছে। উদাহরণস্বরূপ, কি? চরিত্র একটি প্রশ্নের স্ট্রিং শুরু সূচিত। ওয়েবে কোনও সংস্থানকে সফলভাবে সনাক্ত করার জন্য, যখন অক্ষরটি স্ট্রিং বা url কাঠামোর অংশ হিসাবে বোঝানো হয় তখন তার মধ্যে পার্থক্য করার জন্য নিসেসরি হয়।

আমরা কিভাবে JS এ ইউআরএল এনকোডিং অর্জন করতে পারি:

ইউএস ইউটিলিটি ফাংশনে একটি গুচ্ছ প্রস্তাব করে যা আমরা ইউআরএল এর সহজেই এনকোড করতে ব্যবহার করতে পারি। এই দুটি সুবিধাজনক বিকল্প:

  1. encodeURIComponent() : একটি যুক্তি হিসাবে একটি URI এর একটি উপাদান গ্রহণ করে এবং এনকোডেড ইউআরআই স্ট্রিং প্রদান করে।
  2. encodeURI() : একটি ইউআরআই একটি যুক্তি হিসাবে গ্রহণ করে এবং এনকোডেড ইউআরআই স্ট্রিং প্রদান করে।

উদাহরণ এবং ক্যাভিটস:

পুরো ইউআরএল (স্কিম সহ, উদাহরণস্বরূপ https: //) এ encodeURIComponent() সহ পাস না হওয়া সম্পর্কে সচেতন থাকুন। এটি আসলে এটি একটি কার্যকরী URL তে রূপান্তর করতে পারে না। উদাহরণ স্বরূপ:

// for a whole URI don't use encodeURIComponent it will transform
// the / characters and the URL won't fucntion properly
console.log(encodeURIComponent("http://www.random.com/specials&char.html"));

// instead use encodeURI for whole URL's
console.log(encodeURI("http://www.random.com/specials&char.html"));

আমরা f encodeURIComponent করতে পারি আমরা পুরো ইউআরএল encodeURIComponent যে encodeURIComponent স্ল্যাশগুলি (/) এছাড়াও বিশেষ অক্ষরগুলিতে রূপান্তরিত হয়। এটি URL সঠিকভাবে কাজ করবে না।

অতএব (যেমন নাম বোঝায়) ব্যবহার করুন:

  1. encodeURIComponent যা একটি ইউআরএল এর নির্দিষ্ট অংশে আপনি এনকোড করতে চান।
  2. আপনি এনকোড করতে চান যা একটি সম্পূর্ণ URL এ encodeURI

আপনার তিনটি বিকল্প আছে:

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

  • encodeURI() এনকোড করবে না: [email protected]#$&*()=:/,;?+'

  • encodeURIComponent() এনকোড করবে না: ~!*()'

কিন্তু আপনার ক্ষেত্রে, যদি আপনি অন্য পৃষ্ঠার GET প্যারামিটারে একটি URL পাস করতে চান তবে আপনাকে encodeURIComponent বা encodeURIComponent ব্যবহার করতে হবে, তবে encodeURI নয়।

স্ট্যাক ওভারফ্লো প্রশ্ন দেখুন সর্বোত্তম অনুশীলন: পাল্টা, বা এনকোডুরিআই / আরও আলোচনার জন্য এনকোডুরিমিকোমেন্ট


আপনি নীচের ফাংশন ব্যবহার করে esapi লাইব্রেরি ব্যবহার এবং আপনার ইউআরএল এনকোড করতে পারেন। ফাংশনটি স্থির করে যে '/' এনকোডিংয়ে হারিয়ে যায় না যখন অবশিষ্ট সামগ্রী সামগ্রী এনকোড করা হয়:

function encodeUrl(url)
{
    String arr[] = url.split("/");
    String encodedUrl = "";
    for(int i = 0; i<arr.length; i++)
    {
        encodedUrl = encodedUrl + ESAPI.encoder().encodeForHTML(ESAPI.encoder().encodeForURL(arr[i]));
        if(i<arr.length-1) encodedUrl = encodedUrl + "/";
    }
    return url;
}

https://www.owasp.org/index.php/ESAPI_JavaScript_Readme


একই ধরনের জিনিস আমি স্বাভাবিক জাভাস্ক্রিপ্ট দিয়ে চেষ্টা করেছিলাম

function fixedEncodeURIComponent(str){
     return encodeURIComponent(str).replace(/[!'()]/g, escape).replace(/\*/g, "%2A");
}

এনকোডুরিকোমোয়েন্টেন্ট () যাওয়ার উপায়।

var myOtherUrl = "http://example.com/index.html?url=" + encodeURIComponent(myUrl);

কিন্তু আপনার মনে রাখা উচিত যে পিএইচপি সংস্করণ urlencode urlencode() থেকে ছোট পার্থক্য রয়েছে এবং @ সিএমএস উল্লেখ করেছে, এটি প্রতি গৃহস্থালি এনকোড করবে না। http://phpjs.org/functions/urlencode/phpencode() সমতুল্য js তৈরি করেছেন:

function urlencode(str) {
  str = (str + '').toString();

  // Tilde should be allowed unescaped in future versions of PHP (as reflected below), but if you want to reflect current
  // PHP behavior, you would need to add ".replace(/~/g, '%7E');" to the following.
  return encodeURIComponent(str)
    .replace(/!/g, '%21')
    .replace(/'/g, '%27')
    .replace(/\(/g, '%28')
    .replace(/\)/g, '%29')
    .replace(/\*/g, '%2A')
    .replace(/%20/g, '+');
}

কিছুই আমার জন্য কাজ করেনি। আমি যা দেখি তা ছিল লোগো পৃষ্ঠার HTML, কোড ২00 সহ ক্লায়েন্ট পাশে ফিরে আসছে। (302 প্রথমে কিন্তু একই অ্যাজ্যাক্স অনুরোধ অন্য অ্যাজ্যাক্স অনুরোধের ভিতরে লগইন পৃষ্ঠা লোড হচ্ছে, যা প্লেইন লোড করার পরিবর্তে পুনঃনির্দেশিত হওয়া উচিত ছিল লগইন পৃষ্ঠার টেক্সট)।

লগইন কন্ট্রোলারে, আমি এই লাইনটি যোগ করেছি:

Response.Headers["land"] = "login";

এবং বিশ্বব্যাপী অ্যাজাক্স হ্যান্ডলারের মধ্যে আমি এটি করেছি:

$(function () {
    var $document = $(document);
    $document.ajaxSuccess(function (e, response, request) {
        var land = response.getResponseHeader('land');
        var redrUrl = '/login?ReturnUrl=' + encodeURIComponent(window.location);
        if(land) {
            if (land.toString() === 'login') {
                window.location = redrUrl;
            }
        }
    });
});

এখন আমি কোন সমস্যা নেই, এবং এটি একটি কবজ মত কাজ করে।


বিল্ট-ইন ফাংশন encodeURIComponent(str) এবং encodeURI(str)
আপনার ক্ষেত্রে, এই কাজ করা উচিত:

var myOtherUrl = 
       "http://example.com/index.html?url=" + encodeURIComponent(myUrl);

ব্যক্তিগতভাবে, আমি দেখেছি যে অনেক API টি "+" দিয়ে প্রতিস্থাপন করতে চায় তাই আমি নিম্নলিখিতগুলি ব্যবহার করি:

encodeURIComponent(value).replace(/%20/g,'+');

encodeURI বিভিন্ন ব্রাউজারে encodeURI প্রয়োগ করা হয় এবং encodeURI একটি URI (যেমন # এবং এমনকি /) এর কার্যকারিতার অধিকাংশ অক্ষর এনকোড করে না - encodeURI ভাঙ্গা ছাড়াই সম্পূর্ণ ইউআরআই / URL এ ব্যবহার করা হয়।

দ্রষ্টব্য : আপনি ক্যোয়ারী স্ট্রিংয়ের মানগুলির জন্য এনকোডুরিকোমোয়েনেন্ট ব্যবহার করেন (ক্ষেত্র / মান নাম এবং অবশ্যই সমগ্র URL টি নয়)। যদি আপনি এটি অন্য কোন উপায়ে করেন তবে এটি আপনার ক্যোয়ারী স্ট্রিংকে উন্মুক্ত রেখে =,?, &, এর মত অক্ষর এনকোড করবে না।

উদাহরণ:

const escapedValue = encodeURIComponent(value).replace(/%20/g,'+');
const url = 'http://example.com/?myKey=' + escapedValue;

এনকোড ইউআরএল স্ট্রিং

    var url = $(location).attr('href'); //get current url
    //OR
    var url = 'folder/index.html?param=#23dd&noob=yes'; //or specify one

var encodedUrl = encodeURIComponent(url);
console.log(encodedUrl);
//outputs folder%2Findex.html%3Fparam%3D%2323dd%26noob%3Dyes


for more info go http://www.sitepoint.com/jquery-decode-url-string





encoding