URL 在另一个 URL 中的参数
Parameter of an URL within another URL
这个问题很容易理解,我会一步一步解释清楚。
我正在使用 Google Feed API 将 RSS 文件加载到我的 JavaScript 应用程序中。
我有一个绕过 Google 缓存的设置,如果需要的话,我通过在发送到 Google 饲料 API.
例如,假设这是一个 link 到 RSS:
http://example.com/feed.xml
为了绕过缓存,我在最后附加了一个随机数作为参数:
http://example.com/feed.xml?0.12345
整个 url 到 Google Feed API 看起来像这样,其中 "q" 是上面的 link:
https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=5&q=http://example.com/feed.xml?0.12345
这会绕过缓存,在大多数情况下效果很好,但是当我想使用的 RSS link 已经有参数时就会出现问题。例如,像这样:
http://example.com/feed?type=rss
像以前一样在末尾附加数字会产生错误并且不会返回 RSS 文件:
http://example.com/feed?type=rss?0.12345 // ERROR
我试过用“&”来附加随机数,如下:
http://example.com/feed?type=rss&0.12345
这不再给出错误,并且正确返回了 RSS 文件。但是如果我在 Google Feed API url 中使用上面的内容,它就不再绕过缓存:
https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=5&q=http://example.com/feed.xml&0.1234
这是因为“0.1234”被认为是整个url的参数,而不是"q"url的参数。因此 "q" 仅保留为“http://example.com/feed.xml”,它不是唯一的,因此加载了缓存版本。
有没有办法让数字参数成为 "q" url 的一部分而不是整个 url 的一部分?
您需要使用 encodeURIComponent 来执行此操作。
encodeURIComponent('http://example.com/feed.xml&0.1234')
将导致
http%3A%2F%2Fexample.com%2Ffeed.xml%260.1234
当附加到最终结果时,您将得到
https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=5&q=http%3A%2F%2Fexample.com%2Ffeed.xml%260.1234
您需要像这样使用encodeURIComponent
:
var url = 'http://example.com/feed.xml&0.1234';
document.getElementById('results').innerHTML = 'https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=5&q=' + encodeURIComponent(url);
<pre id="results"></pre>
您正在转义本来会被视为 url 的一部分的特殊字符。
追加或创建查询字符串:
var url = 'http://example.com/feed.xml';
var randomParameter = '0.1234';
var queryString = url.indexOf('?') > - 1;
if(queryString){
url = url + '&' + randomParameter;
} else {
url = url + '?' + randomParameter;
}
//url needs to be escaped with encodeURIComponent;
这个问题很容易理解,我会一步一步解释清楚。
我正在使用 Google Feed API 将 RSS 文件加载到我的 JavaScript 应用程序中。
我有一个绕过 Google 缓存的设置,如果需要的话,我通过在发送到 Google 饲料 API.
例如,假设这是一个 link 到 RSS:
http://example.com/feed.xml
为了绕过缓存,我在最后附加了一个随机数作为参数:
http://example.com/feed.xml?0.12345
整个 url 到 Google Feed API 看起来像这样,其中 "q" 是上面的 link:
https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=5&q=http://example.com/feed.xml?0.12345
这会绕过缓存,在大多数情况下效果很好,但是当我想使用的 RSS link 已经有参数时就会出现问题。例如,像这样:
http://example.com/feed?type=rss
像以前一样在末尾附加数字会产生错误并且不会返回 RSS 文件:
http://example.com/feed?type=rss?0.12345 // ERROR
我试过用“&”来附加随机数,如下:
http://example.com/feed?type=rss&0.12345
这不再给出错误,并且正确返回了 RSS 文件。但是如果我在 Google Feed API url 中使用上面的内容,它就不再绕过缓存:
https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=5&q=http://example.com/feed.xml&0.1234
这是因为“0.1234”被认为是整个url的参数,而不是"q"url的参数。因此 "q" 仅保留为“http://example.com/feed.xml”,它不是唯一的,因此加载了缓存版本。
有没有办法让数字参数成为 "q" url 的一部分而不是整个 url 的一部分?
您需要使用 encodeURIComponent 来执行此操作。
encodeURIComponent('http://example.com/feed.xml&0.1234')
将导致
http%3A%2F%2Fexample.com%2Ffeed.xml%260.1234
当附加到最终结果时,您将得到
https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=5&q=http%3A%2F%2Fexample.com%2Ffeed.xml%260.1234
您需要像这样使用encodeURIComponent
:
var url = 'http://example.com/feed.xml&0.1234';
document.getElementById('results').innerHTML = 'https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=5&q=' + encodeURIComponent(url);
<pre id="results"></pre>
您正在转义本来会被视为 url 的一部分的特殊字符。
追加或创建查询字符串:
var url = 'http://example.com/feed.xml';
var randomParameter = '0.1234';
var queryString = url.indexOf('?') > - 1;
if(queryString){
url = url + '&' + randomParameter;
} else {
url = url + '?' + randomParameter;
}
//url needs to be escaped with encodeURIComponent;