0

次の関数を使用して、URL からクエリ文字列を簡単に取得できるようにしています。

var urlParams = {};
(function () {
var e,
    a = /\+/g,  // Regex for replacing addition symbol with a space
    r = /([^&=]+)=?([^&]*)/g,
    d = function (s) { return decodeURIComponent(s.replace(a, " ")); },
    q = window.location.search.substring(1);

while (e = r.exec(q))
   urlParams[d(e[1])] = d(e[2]);
})();

それから私は単に電話します

var k=urlParams["url"];
var ttl=urlParams["title"];

関数を壊す次のクエリ文字列を除いて、これはうまく機能しています:

?title=Jpreay%20will%20do%20a%20press%20release%20or%20news%20announcement%20commercial%20for%20$5,%20only%20on%20fiverr.com&cnt=For%20only%205$,%20jpreay%20will%20do%20a%20press%20release%20or%20news%20announcement%20commercial.%20Top%20Rated%20Seller%20100%%20Rating%20for%20Over%2010%20Months%20Now%20In%20this%20gig%20I%20am%20providing%20a%20news%20release%20or%20some%20other%20type%20of%20event%20|%20On%20Fiverr.com&url=http%3A%2F%2Ffiverr.com%2Fjpreay%2Ffilm-a-press-release-or-news-announcement-of-your-product-or-services

次のエラーが表示されます。

URIError: malformed URI sequence
[Break On This Error]   
var k=urlParams["url"];

ここでの問題が何であるかを理解するのを手伝ってくれる人はいますか?

前もって感謝します!

4

1 に答える 1

0

unescape を使用し、? を含めます。部分文字列を実行する代わりに、一致する正規表現で。また、関数がスペースを好まない場合に備えて、スペース置換を unescape の外に移動します。

したがって、最終的には次のようになります。

var urlParams = {};
(function () {
var e,
    a = /\+/g,  // Regex for replacing addition symbol with a space
    r = /([^&?=]+)=?([^&?]*)/g,
    d = function (s) { return unescape(s).replace(a, " "); },
    q = window.location.search;

while (e = r.exec(q))
   urlParams[d(e[1])] = d(e[2]);
})();

テストすると(window.location.searchの代わりに文字列を使用)、

var k=urlParams["url"];
var ttl=urlParams["title"];
console.log('k='+k);
console.log('ttl='+ttl);

私はこれを得る:

k=http://fiverr.com/jpreay/film-a-press-release-or-news-announcement-of-your-product-or-services
ttl=Jpreay will do a press release or news announcement commercial for $5, only on fiverr.com
于 2013-06-06T16:36:57.680 に答える