我试图将参数传递给URL,如下所示:
http://www.foobar.com/foo?imageurl=
Run Code Online (Sandbox Code Playgroud)
并且我想传递由另一个API生成的参数suchas和image URL,并且图像的链接结果如下:
http://www.image.com/?username=unknown&password=unknown
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用URL时:
http://www.foobar.com/foo?imageurl=http://www.image.com/?username=unknown&password=unknown
Run Code Online (Sandbox Code Playgroud)
它不起作用..
我也尝试在imageURL上使用encodeURI和encodeURIComponents,这也行不通.
在PHP中,JavaScript的encodeURIcomponent相当于什么?
我在想...
(除了base64的问题加上查询字符串中的'+'符号 - 它被转换为'space'并且可以通过%2b解决):--->哪个是在查询字符串中传输数据的首选方法?
这两个函数都可以通过JS命令使用:
btoa
encodeUriComponent
所以我问自己(和你):
我什么时候应该用什么?(我一直用 encodeUriCompoonent
- 本能).
定义不同的问题 - 但实现可能类似......
我想我已经找到了询问的理由......(以及为什么之前没有人问过)
我想编码我的URL,但我想将空格转换为加号.
这就是我试图做的......
var search = "Testing this here &";
encodeURIComponent(search.replace(/ /gi,"+"));
Run Code Online (Sandbox Code Playgroud)
从那里得到的输出是Testing%2Bthis%2Bhere%2B%26
我想要的是Testing+this+here+%26
我尝试用空格替换%20
它以将其转换为加号,但这似乎不起作用.谁能告诉我这是什么我在这里做错了?
我在Firefox和IE之间感到沮丧,主要是Firefox,因为它在我可以在Javascript中使用它之前自动解码哈希中的参数.IE不会自动解码网址,因此不会给我读错误.
我的问题类似于这个问题,除了我没有使用ASP.NET ASP.NET MVC自动解码来自AJAX的JSON编码参数
所以如果我拿一个网址就好 example.com/#question=!%40%23%24%25^%26*(
而"!%40%23%24%25 ^%26*("使用encodeURIComponent编码,在IE中,当我访问哈希时,它将保留为"!%40%23%24%25 ^%26*( "但是在firefox中,当我访问哈希时,它会被自动解码为"!@#$%^&*("
这个问题是在我的脚本中我使用decodeURIComponent来解码编码值,如果字符串确实是编码的话,这很好.由于它已经在Firefox中解码,它给我一个格式错误的URI序列错误,IE并没有给我任何错误.
我怎样才能解决这个问题?
我在javascript中有一个JSON对象形式的大数据.我已使用JSON.stringify()将其转换为字符串.现在我的用例是在文本文件中向用户提供这个大字符串.所以为此,我写了下面的代码.
HTML代码
<button id='text_feed' type="submit">Generate ION Feed</button>
<a href="data:attachment/txt" id="textLink" download="feed.txt"></a>
Run Code Online (Sandbox Code Playgroud)
Javascript代码
var text = //huge string
$("#text_feed").click(function() {
_generateFeed(text);
});
var _generateFeed = function(text) {
//some code here
$("#textLink").attr("href",
"data:attachment/txt," + encodeURIComponent(text)) [0].click();
});
};
Run Code Online (Sandbox Code Playgroud)
问题:当字符串长度很小时,我可以下载数据.但是当字符串长度变得更高(> 10 ^ 5)时,我的页面崩溃了.发生这种情况是因为"encodeUriComponet(text)"无法编码大数据.
我也尝试了window.open("data:attachment/txt," + encodeURIComponent(text));
但是我的页面再次崩溃,因为encodeURIComponet无法编码这么大的字符串的原因相同.
另一种方法:我还考虑使用HTML5文件编写API将数据写入文件,但它仅支持Chrome浏览器,但我需要将其用于至少firefox和chrome.
用例 我不想通过破坏数据来进行多次下载,因为我最终需要在单个文件中存储数据.
我的目标是支持大约10 ^ 6长度的字符串.任何人都可以帮我如何下载/写入这些数据到一个文件.
我编码一个文件名并将其作为URL的一部分发送/rest/get?name=Filename.txt
.在JS链接构建就像一样简单
url = '/rest/get?name=' + window.encodeURIComponent(file.name);
Run Code Online (Sandbox Code Playgroud)
它适用于简单的情况,但对于硬核测试,我使用一个名为的文件
??abcABCæøåÆØÅäöüïëêîâéíáóúýñ½§!#¤%&()=`@£$€{[]}+´¨^~'-_,;.txt
Run Code Online (Sandbox Code Playgroud)
在URI编码后,我希望得到一个链接
/rest/get?name=%E4%BD%A0%E5%A5%BDabcABC%C3%A6%C3%B8%C3%A5%C3%86%C3%98%C3%85%C3%A4%C3%B6%C3%BC%C3%AF%C3%AB%C3%AA%C3%AE%C3%A2%C3%A9%C3%AD%C3%A1%C3%B3%C3%BA%C3%BD%C3%B1%C2%BD%C2%A7%3F%3FabcABC%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD!%23%C2%A4%25%26()%3D%60%40%C2%A3%24%E2%82%AC%7B%5B%5D%7D%2B%C2%B4%C2%A8%5E~%27-_%2C%3B.txt
Run Code Online (Sandbox Code Playgroud)
我明白了 构建的链接在最新版本的IE和Chrome中正常工作,但在Firefox中失败.经过一番调查后我发现在Firefox中encodeURIcomponent
工作方式不同.这是Firefox中的实际结果:
/rest/get?name=%3F%3FabcABC%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD!%23%EF%BF%BD%25%26%28%29%3D%60%40%EF%BF%BD%24%3F{[]}%2B%EF%BF%BD%EF%BF%BD^~%27-_%2C%3B.txt
Run Code Online (Sandbox Code Playgroud)
视觉比较(Chrome链接位于左侧,Firefox链接位于右侧):
我还尝试将有效链接(在Chrome中构建)复制并粘贴到Firefox,它可以正常工作.
为什么我会得到不同的结果?
我不喜欢
使用不同的编码吗??e?n?c?o?d?e?U?R?I?c?o?m?p?o?n?e?n?t?(?)?
̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶̶encodeURIComponent()
UPD.我发现了类似的问题(encodeURIComponent在中国的浏览器中表现不同,因为位置 [搜索]和 encodeURIComponent与浏览器和ä-å-å字符 [äöå]的区别),两者都没有答案.
UPD.2进一步调查显示,以下字符的编码方式不同,导致服务器上出现"文件未找到"异常:
我在编码字符串时遇到问题,因此我可以将变量放入链接中.我确信这很简单,但是我无法改变任何事情.
$("a.inquiry").attr("href", "/inquiry/6933/text=" + encodeURI("text o"));
Run Code Online (Sandbox Code Playgroud)
这不起作用.
encodeURI("text o")
Run Code Online (Sandbox Code Playgroud)
仍然回归:
link/text o
Run Code Online (Sandbox Code Playgroud)
代替:
link/text%20
Run Code Online (Sandbox Code Playgroud)
还尝试过:
$("a.inquiry").attr("href", encodeURIComponent("/inquiry/6933/text=" + "text o"));
Run Code Online (Sandbox Code Playgroud) 我想在我的Lua(Luvit)项目中使用decodeURI
或使用decodeURIComponent
JavaScript .
JavaScript的:
decodeURI('%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82')
// result: ??????
Run Code Online (Sandbox Code Playgroud)
很喜欢:
require('querystring').urldecode('%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82')
-- result: '%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82'
Run Code Online (Sandbox Code Playgroud) 今天我遇到了一个奇怪的事情,同时在我们的应用程序中排除了流氓AJAX请求.我们使用jQuery.param
构建请求字符串将数据发送回服务器.
在一个场景中,提供给param函数的对象有一个null选项,所以它看起来像这样:
var myData = {
x : 1,
y : null
};
var params = jQuery.param(myData);
Run Code Online (Sandbox Code Playgroud)
这段代码实际上埋藏在骨干集合中,但原理是一样的.
现在,当服务器收到变量的参数y
是文字字符串"null"
而不是存在时,我感到非常震惊null
.
经过一番挖掘后,我发现encodeURIComponent(null)
返回字符串"null"
并获得更有趣的'' + null
收益"null"
.这在Chrome 23以及Firefox 11上进行了测试.
最终发送到jQuery.param
函数的对象是从函数的参数构建的,而null是参数的完全有效值.我只是通过构建对象来解决它y : param || ''
,但我很好奇本机JS函数的明显错误,以及为什么'' + null = "null"
,因为它们通常被认为是两个不同的概念.