ইউএসএল প্যারামিটার থেকে পালাতে পারেন


302

আমি এমন একটি jQuery প্লাগইন খুঁজছি যা ইউআরএল প্যারামিটারগুলি পেতে পারে এবং জাভাস্ক্রিপ্ট ত্রুটির আউটপুট না করে এই অনুসন্ধান স্ট্রিংটিকে সমর্থন করতে পারে: "ত্রুটিযুক্ত ইউআরআই ক্রম"। যদি এখানে কোনও jQuery প্লাগইন না থাকে তবে এটি সমর্থন করার জন্য এটি কীভাবে পরিবর্তন করতে হবে তা আমার জানতে হবে।

?search=%E6%F8%E5

URL প্যারামিটারের মান, যখন ডিকোড করা হবে, তা হওয়া উচিত:

æøå

(চরিত্রগুলি নরওয়েজিয়ান)।

আমার সার্ভারে অ্যাক্সেস নেই, তাই আমি এটিতে কোনও কিছুই সংশোধন করতে পারি না।



1
আপনি "বিকৃত ইউআরআই ক্রম" পাওয়ার কারণটি বেশিরভাগ ফাংশন ব্যবহার করে decodeURIComponent()। নরওয়েজিয়ান অক্ষরগুলি সম্ভবত এমন কিছু ব্যবহার করে এনকোড করা হয়েছিল escape()এবং decodeURIComponent()কলটি কলটিতে পরিবর্তন করা unescape()উচিত।
কেভিন এম

: একটি আধুনিক সমাধান জন্য আমার উত্তর দেখুন stackoverflow.com/a/19992436/64949
Sindre Sorhus

উত্তর:


417
function getURLParameter(name) {
    return decodeURI(
        (RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]
    );
}

33
এর সাথে name = 'bar', আমি মনে করি এই রেজিএক্সপ্যাকটি মিলবে 'foobar=10'এবং ফিরে আসবে '10'। হতে পারে আপনি '[?|&]'আপনার regexp এর শুরুতে যুক্ত করতে পারেন । চিয়ার্স!
সাবস্টিয়ান রোকসা সেরেরা

34
এই ফাংশনটি প্যারামিটার সংজ্ঞায়িত না হলে নাল পরিবর্তে 'নাল' ফেরায় ... জেএসের আনন্দ ...
ড্যামিয়েন

12
আপনি "ডিকোডিউআরআই ()" এর পরিবর্তে "ডিকোডেরিউআইআরকিউম্পোনেন্ট ()" পেতে চাইতে পারেন, বিশেষত আপনি যদি ইউআরএল প্যারামিটার হিসাবে ফিরতি ইউআরএলের মতো আকর্ষণীয় ডেটাটি পার করছেন
পারফেকশনিস্ট

25
এটি ভাল, তবে ডিকোডেরিউআরকিউম্পোনেন্টটি আরও ভাল, উদাহরণস্বরূপ আমার প্যারামে একটি হ্যাশট্যাগ ছিল (% 23) যা ডিকোডিউরিআই দ্বারা উপেক্ষা করা হবে। এবং আমি নাল ফিরে আসব না, তবে "", কারণ ডিকোডিউরিআই (নাল) === "নাল", যা একটি অদ্ভুত ফেরতের মান, "" আরও ভাল; (getURLParameter ("param")) এর পরিবর্তে যদি (getURLParameter ("param") === "নাল") করতে পারেন তবে আপনি করতে পারেন। সুতরাং, আমার উন্নত সংস্করণ: ডিকোডেরিউআরকিউম্পোনেন্ট ((RegExp (নাম + '=' + '(। +?) (& | $)')) এক্সিকিউট (লোকেশন.সন্ধান) || [, ""]) [1])
standup75

3
ফলাফলটি পাওয়া গেলেও না পাওয়া যায় না এবং এই বিকল্পটি যেমন উদাহরণস্বরূপ [[নাল], আপনি যা রাখেন তা বিবেচনাধীন নয়) ডাউনকে ভোট দেওয়া হয়েছিল, কারণ ত্রিশ ফলাফল ডিকোডেরির মধ্যে আবৃত ছিল যা কোনও কিছুকে স্ট্রিংয়ে পরিণত করেছিল, সঞ্জীব সঠিক ছিল তবে তার কোড সঠিকভাবে পরীক্ষা করা হয়নি এবং সহজ অনুলিপি এবং পেস্ট কাজ করে না। function getURLParameter(name) { var p = RegExp(name + '=' + '(.+?)(&|$)').exec(location.search); if(!!p) { p = decodeURI(p[1]); } return p; }
লুকাসজ 'সেভেরিয়ান' গ্রেলা

295

নীচে আমি এখানে মন্তব্যগুলি থেকে তৈরি করেছি, পাশাপাশি উল্লেখ করা হয়নি এমন বাগগুলি ফিক্সিংয়ের (যেমন বাস্তবে নাল ফিরে আসা, এবং 'নাল' নয়):

function getURLParameter(name) {
    return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null;
}

6
newরেজিএক্সপ্যাকের সামনে কীভাবে যোগ করবেন? কম লিঙ্ক সতর্কতা।
ripper234

18
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। "নাল" এর পরিবর্তে আসল নাল ফিরে পাওয়া আরও ভাল।
আর্ট

11
কারও যদি এটির দরকার হয় কফিস্ক্রিপ্টে রূপান্তরিত হয়: get URLParameter: (নাম) -> রিটার্ন ডিকোডের ইউআরসি কম্পোনেন্ট ((নতুন RegExp ("[?? &] # {নাম} = ([^ &;]] +?)) (& | ## | | $) ")। এক্সিকিউট (লোকেশন.সার্চ) || [নাল," "]) [1]। স্থান (/ \ + / জি, '% 20')) নাল;
রেডবার্ড

1
@ রেডবার্ড - আপনার ফাংশনে ডাবল কোলনের পরিবর্তে পদ্ধতির সংজ্ঞা অনুসারে '=' চিহ্ন থাকা উচিত নয়?
জিপ্পি

1
এটি পাওয়া-ইউআরএল-পরামিতি ফাংশনের একমাত্র সংস্করণ যা আমার জন্য ইউটিএফ 8 স্ট্রিংয়ের সাথে কাজ করে।
অবশ্যই

107

আপনি যা চান তা হ'ল jQuery URL পার্সার প্লাগইন । এই প্লাগইনটি সহ, একটি নির্দিষ্ট ইউআরএল প্যারামিটারের মান (বর্তমান ইউআরএল) পাওয়া এটির মতো দেখাচ্ছে:

$.url().param('foo');

আপনি কী হিসাবে প্যারামিটারের নামগুলি এবং মান হিসাবে প্যারামিটার মানগুলির একটি বিষয় চান, আপনি কেবল param()যুক্তি ছাড়াই কল করতে চাইবেন :

$.url().param();

এই লাইব্রেরিটি কেবলমাত্র বর্তমানটি নয়, অন্যান্য ইউআরএলগুলির সাথেও কাজ করে:

$.url('http://allmarkedup.com?sky=blue&grass=green').param();
$('#myElement').url().param(); // works with elements that have 'src', 'href' or 'action' attributes

যেহেতু এটি একটি সম্পূর্ণ ইউআরএল পার্সিংয়ের গ্রন্থাগার, তাই আপনি ইউআরএল থেকে অন্যান্য তথ্য যেমন পোর্ট নির্দিষ্ট করা, বা পথ, প্রোটোকল ইত্যাদিও পেতে পারেন:

var url = $.url('http://allmarkedup.com/folder/dir/index.html?item=value');
url.attr('protocol'); // returns 'http'
url.attr('path'); // returns '/folder/dir/index.html'

এটিতে অন্যান্য বৈশিষ্ট্যও রয়েছে, আরও ডক্স এবং উদাহরণের জন্য এর হোমপেজটি দেখুন।

কিন্ডা বেশিরভাগ ক্ষেত্রে কাজ করে এমন নির্দিষ্ট উদ্দেশ্যে আপনার নিজের ইউআরআই পার্সার লেখার পরিবর্তে একটি প্রকৃত ইউআরআই পার্সার ব্যবহার করুন। উত্তরের উপর নির্ভর করে, অন্যান্য উত্তরগুলির কোড এর 'null'পরিবর্তে ফিরে আসতে পারে null, খালি প্যারামিটারগুলির সাথে কাজ করে না ( ?foo=&bar=x), পার্স করতে পারে না এবং একবারে সমস্ত পরামিতি ফেরত দিতে পারে না, যদি আপনি বারবার প্যারামিটারগুলির জন্য URL টি জিজ্ঞাসা করেন তবে কাজটির পুনরাবৃত্তি করবে etc.

প্রকৃত ইউআরআই পার্সার ব্যবহার করুন, নিজের আবিষ্কার করবেন না।

JQuery এর বিরুদ্ধ লোকদের জন্য, প্লাগইনের একটি সংস্করণ রয়েছে যা খাঁটি জেএস


23
প্রশ্নটি হল "jQuery এর সাথে ইউআরএল প্যারামিটার পান"। আমার উত্তর প্রশ্নের উত্তর। অন্যান্য উত্তরগুলি ব্যবহারকারীকে এই নির্দিষ্ট ব্যবহারের ক্ষেত্রে তার নিজস্ব ইউআরআই পার্সার লিখতে নির্দেশ দেয়, এটি একটি ভয়ানক ধারণা। ইউআরআই পার্স করা আরও জটিল যেগুলি লোকেরা মনে করে।
লুকাস

2
এই উত্তরটি আমি সন্ধান করছিলাম এবং এটি অন্যান্য জবাবগুলির থেকে ভিন্ন, খুব jQuery-ish।
এহতেশ চৌধুরী চৌধুরী 17

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

প্রশ্নটি "জাভাস্ক্রিপ্ট" বলে মনে করে (এটি আমার মনে হয় এর সরাসরি DOM অর্থ) বা jQuery। সুতরাং অন্যদের কেউ করবেন।
ব্রুনোইস

43

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

function getParameters() {
  var searchString = window.location.search.substring(1),
      params = searchString.split("&"),
      hash = {};

  if (searchString == "") return {};
  for (var i = 0; i < params.length; i++) {
    var val = params[i].split("=");
    hash[unescape(val[0])] = unescape(val[1]);
  }
  return hash;
}

ইউআরএল দিয়ে গেটপ্যারামিটারগুলি () কল করা /posts?date=9/10/11&author=nilbusফিরে আসবে:

{
  date:   '9/10/11',
  author: 'nilbus'
}

আমি কোডটি এখানে অন্তর্ভুক্ত করব না কারণ এটি প্রশ্ন থেকে আরও দূরে রয়েছে, তবে weareon.net এমন একটি লাইব্রেরি পোস্ট করেছে যা ইউআরএলটিতেও পরামিতিগুলির হেরফের করতে দেয়:


1
হ্যাঁ, সমস্ত প্যারামগুলি পাওয়ার জন্য এটি আরও ভাল। এখানে তালিকাভুক্ত অন্যান্য সমস্ত সমাধান প্রতিটি প্যারামের জন্য রেজেক্স পুনরাবৃত্তি করে।
বার্নার্ড

এই ফাংশনটি একটি বিশ্রী অবজেক্ট দেয়: {"": undefined}যখন ইউআরএল পরামিতিগুলি শূন্য থাকে। অ্যাসাইনমেন্টের if(searchString=='') return {};পরে সরাসরি ব্যবহার করে একটি খালি বস্তু searchStringফেরানো সেরা।
জর্দান আর্সেনো

40

আপনি ব্রাউজারের স্থানীয় অবস্থান.সন্ধান সম্পত্তি ব্যবহার করতে পারেন :

function getParameter(paramName) {
  var searchString = window.location.search.substring(1),
      i, val, params = searchString.split("&");

  for (i=0;i<params.length;i++) {
    val = params[i].split("=");
    if (val[0] == paramName) {
      return unescape(val[1]);
    }
  }
  return null;
}

তবে কিছু jQuery প্লাগইন রয়েছে যা আপনাকে সহায়তা করতে পারে:


4
এটি সমস্ত ক্লাব ওয়ান-লাইনারগুলির চেয়ে অনেক ক্লিনার এবং আরও পঠনযোগ্য (এবং সম্ভবত বাগ-মুক্ত) free
টিএমএমএম

8
আমি ইউনস্কেপ () এর পরিবর্তে ডিকোডেরিউআইআরকিউম্পোন্ট () ব্যবহার করার পরামর্শ দেব
ফ্রিদেব

+1 এটি আধুনিক ব্রাউজারগুলির জন্য কাজ করে তবে কিছু ডিভস এর সাথে কাজ করা দরকার ...: | আইই 8: এস।
ব্রুনোইস

25

999 এর উত্তরের ভিত্তিতে :

function getURLParameter(name) {
    return decodeURIComponent(
        (location.search.match(RegExp("[?|&]"+name+'=(.+?)(&|$)'))||[,null])[1]
    );  
}

পরিবর্তন করুন:

  • decodeURI() সঙ্গে প্রতিস্থাপন করা হয় decodeURIComponent()
  • [?|&] regexp এর শুরুতে যুক্ত করা হয়

3
আপনি কেন এই পরিবর্তনগুলি করেছেন তা আপনি যদি ব্যাখ্যা করতে পারেন তবে অন্যের জন্য সহায়ক হতে পারে। Thx
টিম

3
খালি প্যারাম হ্যান্ডেল নেই: ?a=&b=1। আরও ভাল রিজেপেক্স হবে:"[?&]"+name+"=([^&]*)"
মার্জ

6

এটিকে সংবেদনশীল হওয়ার জন্য আই প্যারামিটার যুক্ত করতে হবে:

  function getURLParameter(name) {
    return decodeURIComponent(
      (RegExp(name + '=' + '(.+?)(&|$)', 'i').exec(location.search) || [, ""])[1]
    );
  }

3

সমস্ত উত্তর পড়ার পরে আমি পতাকা হিসাবে পরামিতিগুলি ব্যবহার করার জন্য এই সংস্করণটি + একটি দ্বিতীয় ফাংশন দিয়ে শেষ করেছি

function getURLParameter(name) {
    return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)','i').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null;
}

function isSetURLParameter(name) {
    return (new RegExp('[?|&]' + name + '(?:[=|&|#|;|]|$)','i').exec(location.search) !== null)
}

2
ভাল উত্তর, তবে একটি মাত্র সতর্কতা। প্রতি JSHint, [, ""] পুরানো ব্রাউজারগুলির জন্য সমস্যা তৈরি করতে পারে। সুতরাং, পরিবর্তে [নাল, ""] বা [অপরিবর্তিত, ""] ব্যবহার করুন। আমাদের মধ্যে এখনও কিছু অসন্তুষ্ট কিছু আছে যারা আইই 8 সমর্থন করে এবং আমি এটি আই 7 বলার সাহস করি।
ডেলিসিয়া ব্রুমিট

2
$.urlParam = function(name){
  var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(top.window.location.href); 
  return (results !== null) ? results[1] : 0;
}

$.urlParam("key");

2

উদাহরণস্বরূপ, একটি ফাংশন যা কোনও পরামিতি ভেরিয়েবলের মান প্রদান করে returns

function GetURLParameter(sParam)
{
    var sPageURL = window.location.search.substring(1);
    var sURLVariables = sPageURL.split('&');
    for (var i = 0; i < sURLVariables.length; i++)
    {
        var sParameterName = sURLVariables[i].split('=');
        if (sParameterName[0] == sParam)
        {
            return sParameterName[1];
        }
    }
}​

এবং এইভাবে আপনি এই URL টি ধরে ধরে এই ফাংশনটি ব্যবহার করতে পারেন,

"Http://example.com/?technology=jquery&blog=jquerybyexample"।

var tech = GetURLParameter('technology');
var blog = GetURLParameter('blog');

সুতরাং উপরের কোডে ভেরিয়েবল "টেক" এর মান "jQuery" থাকবে এবং "ব্লগ" ভেরিয়েবলের "jquerybyexample" থাকবে।


2

এই জাতীয় কিছু জন্য আপনার jQuery ব্যবহার করা উচিত নয়!
আধুনিক উপায় হ'ল বওয়ারের মতো প্যাকেজ-ম্যানেজারের মাধ্যমে ছোট ছোট পুনরায় ব্যবহারযোগ্য মডিউলগুলি ব্যবহার করা।

আমি একটি ক্ষুদ্র মডিউল তৈরি করেছি যা ক্যোয়ারী স্ট্রিংটিকে কোনও বস্তুতে পার্স করতে পারে। এটি এর মতো ব্যবহার করুন:

// parse the query string into an object and get the property
queryString.parse(unescape(location.search)).search;
//=> æøå

যদি আপনি বলছেন যে এটির কাঠামো তৈরি করা আধুনিক নয় তবে তা ঠিক। তবে আমার মতে ফ্রেমওয়ার্কগুলির সত্যই তাদের স্থান আছে। jQuery যদিও আমার কাছে কম বেশি সুন্দর দেখাচ্ছে।
লোডেভিজক

0

এখানে প্রচুর বগি কোড রয়েছে এবং রেজেেক্স সমাধানগুলি খুব ধীর। আমি একটি সমাধান পেয়েছি যা রেজেক্সেক্স অংশের চেয়ে 20x পর্যন্ত দ্রুত কাজ করে এবং মার্জিতভাবে সহজ:

    /*
    *   @param      string      parameter to return the value of.
    *   @return     string      value of chosen parameter, if found.
    */
    function get_param(return_this)
    {
        return_this = return_this.replace(/\?/ig, "").replace(/=/ig, ""); // Globally replace illegal chars.

        var url = window.location.href;                                   // Get the URL.
        var parameters = url.substring(url.indexOf("?") + 1).split("&");  // Split by "param=value".
        var params = [];                                                  // Array to store individual values.

        for(var i = 0; i < parameters.length; i++)
            if(parameters[i].search(return_this + "=") != -1)
                return parameters[i].substring(parameters[i].indexOf("=") + 1).split("+");

        return "Parameter not found";
    }

console.log(get_param("parameterName"));

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


0
<script type="text/javascript">
function getURLParameter(name) {
        return decodeURIComponent(
            (location.search.toLowerCase().match(RegExp("[?|&]" + name + '=(.+?)(&|$)')) || [, null])[1]
        );
    }

</script>

getURLParameter(id)বা getURLParameter(Id)একই কাজ করে:)


0

ইউআরএলকে প্যারামিটার হিসাবে সঞ্চিত ডায়নামিক ভেরিয়েবলগুলি পেতে jQuery কোড স্নিপেট এবং আপনার স্ক্রিপ্টগুলির সাথে ব্যবহারের জন্য জাভাস্ক্রিপ্ট ভেরিয়েবল হিসাবে সংরক্ষণ করুন:

$.urlParam = function(name){
    var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
    if (results==null){
       return null;
    }
    else{
       return results[1] || 0;
    }
}

example.com?param1=name&param2=&id=6

$.urlParam('param1'); // name
$.urlParam('id');        // 6
$.urlParam('param2');   // null

//example params with spaces
http://www.jquery4u.com?city=Gold Coast
console.log($.urlParam('city'));  
//output: Gold%20Coast

console.log(decodeURIComponent($.urlParam('city'))); 
//output: Gold Coast

-1
function getURLParameters(paramName) 
{
        var sURL = window.document.URL.toString();  
    if (sURL.indexOf("?") > 0)
    {
       var arrParams = sURL.split("?");         
       var arrURLParams = arrParams[1].split("&");      
       var arrParamNames = new Array(arrURLParams.length);
       var arrParamValues = new Array(arrURLParams.length);     
       var i = 0;
       for (i=0;i<arrURLParams.length;i++)
       {
        var sParam =  arrURLParams[i].split("=");
        arrParamNames[i] = sParam[0];
        if (sParam[1] != "")
            arrParamValues[i] = unescape(sParam[1]);
        else
            arrParamValues[i] = "No Value";
       }

       for (i=0;i<arrURLParams.length;i++)
       {
                if(arrParamNames[i] == paramName){
            //alert("Param:"+arrParamValues[i]);
                return arrParamValues[i];
             }
       }
       return "No Parameters Found";
    }

}

-1

আমি এই জাতীয় URL থেকে জাভাস্ক্রিপ্টে ইউআরএল প্যারামিটার পেতে একটি সাধারণ ফাংশন তৈরি করেছি:

.....58e/web/viewer.html?page=*17*&getinfo=33


function buildLinkb(param) {
    var val = document.URL;
    var url = val.substr(val.indexOf(param))  
    var n=parseInt(url.replace(param+"=",""));
    alert(n+1); 
}
buildLinkb("page");

আউটপুট: 18


2
একাধিক প্রশ্নের উত্তর এবং অনুলিপি / বয়লারপ্লেট পোস্ট করার সময় সতর্ক থাকুন, এগুলি সম্প্রদায় দ্বারা "স্প্যামি" হিসাবে চিহ্নিত করা হয়। আপনি যদি এটি করছেন তবে এর অর্থ সাধারণত প্রশ্নগুলি হ'ল অনুলিপিগুলি হয়
কেভ

-1

আপনার ক্ষেত্রে লোকালহোস্ট / ইনডেক্স.এক্সপি? এ = 1 # কিছুর মতো ইউআরএল রয়েছে এবং আপনার হ্যাশ নয় পারম পেতে হবে।

var vars = [], hash, anchor;
var q = document.URL.split('?')[1];
if(q != undefined){
    q = q.split('&');
    for(var i = 0; i < q.length; i++){
        hash = q[i].split('=');
        anchor = hash[1].split('#');
        vars.push(anchor[0]);
        vars[hash[0]] = anchor[0];
    }
}

-1

@ পলপ্পেনহাইমের উত্তরের সামান্য পরিবর্তন, কারণ এটি প্যারামিটারের নামগুলি সঠিকভাবে পরিচালনা করবে না যা অন্যান্য প্যারামিটার নামের একটি অংশ হতে পারে।

উদাহরণস্বরূপ: আপনার যদি "অ্যাপেনভ" এবং "এনভিনিউ" প্যারামিটার থাকে তবে "এনএনভি" এর মান হ্রাস করা "অ্যাপেনভ" মানটি বাছাই করতে পারে।

ফিক্স:

var urlParamVal = function (name) {
    var result = RegExp("(&|\\?)" + name + "=(.+?)(&|$)").exec(location.search);
    return result ? decodeURIComponent(result[2]) : "";
};

-2

এটি সাহায্য করতে পারে।

<script type="text/javascript">
    $(document).ready(function(){
        alert(getParameterByName("third"));
    });
    function getParameterByName(name){
        var url     = document.URL,
            count   = url.indexOf(name);
            sub     = url.substring(count);
            amper   = sub.indexOf("&"); 

        if(amper == "-1"){
            var param = sub.split("=");
            return param[1];
        }else{
            var param = sub.substr(0,amper).split("=");
            return param[1];
        }

    }
</script>

1
এই কোড ভাল পরীক্ষা করা হয় না। ক্যোয়ারির সাথে কী ঘটেছিল তা অনুমান করুন?twothrids=text
Lyth
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.