如何对URL参数进行编码?
我正在尝试将参数传递给如下所示的 URL:
http://www.foobar.com/foo?imageurl=
我想传递参数,例如由另一个 API 自行生成的图像 URL,并且图像的链接结果为:
http://www.image.com/?username=unknown&password=unknown
但是,当我尝试使用 URL:
http://www.foobar.com/foo?imageurl=http://www.image.com/?username=unknown&password=unknown
它不起作用。
我还尝试在 imageURL 上使用 encodeURI()
和 encodeURIComponent()
,但这也不起作用。
I am trying to pass parameters to a URL which looks like this:
http://www.foobar.com/foo?imageurl=
And I want to pass the parameters such as an image URL which is generated itself by another API, and the link for the image turns out as:
http://www.image.com/?username=unknown&password=unknown
However, when I try to use the URL:
http://www.foobar.com/foo?imageurl=http://www.image.com/?username=unknown&password=unknown
It doesn't work.
I have also tried using encodeURI()
and encodeURIComponent()
on the imageURL, and that too doesn't work.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
使用 PHP
结果
使用 Javascript:
演示:http://jsfiddle.净/Lpv53/
With PHP
Result
With Javascript:
DEMO: http://jsfiddle.net/Lpv53/
使用新的 ES6
Object.entries()
,它可以创建一个有趣的小嵌套map
/join
:Using new ES6
Object.entries()
, it makes for a fun little nestedmap
/join
:使用 URLSearchParams:
With URLSearchParams:
只需亲自尝试
encodeURI()
和encodeURIComponent()
...输入:
@#$%^&*
。输出:%40%23%24%25%5E%26*
。那么,等等,*
发生了什么?为什么这个没有转换? TLDR:您实际上想要fixedEncodeURIComponent()
和
fixedEncodeURI()
。长话短说...您不应该使用
encodeURIComponent()
或encodeURI()
。您应该使用fixedEncodeURIComponent()
和fixedEncodeURI()
,根据 MDN 文档。关于
encodeURI()
...关于
encodeURIComponent()
...,有什么区别呢?
fixedEncodeURI()
和fixedEncodeURIComponent()
转换同一组值,但fixedEncodeURIComponent()
也会转换该组:+@? =:*#;,$&
。该集合用于GET
参数(&
、+
等)、锚标记 (#
) 、通配符标签 (*
)、电子邮件/用户名部分 (@
) 等。例如 -- 如果您使用
encodeURI ()
,[email protected]/?email=me@home
将无法正常使用将第二个@
发送到服务器,除非您的浏览器处理兼容性(Chrome 自然会这样做) 经常)。Just try
encodeURI()
andencodeURIComponent()
yourself...Input:
@#$%^&*
. Output:%40%23%24%25%5E%26*
. So, wait, what happened to*
? Why wasn't this converted? TLDR: You actually wantfixedEncodeURIComponent()
andfixedEncodeURI()
. Long-story...You should not be using
encodeURIComponent()
orencodeURI()
. You should usefixedEncodeURIComponent()
andfixedEncodeURI()
, according to the MDN Documentation.Regarding
encodeURI()
...Regarding
encodeURIComponent()
...So, what is the difference?
fixedEncodeURI()
andfixedEncodeURIComponent()
convert the same set of values, butfixedEncodeURIComponent()
also converts this set:+@?=:*#;,$&
. This set is used inGET
parameters (&
,+
, etc.), anchor tags (#
), wildcard tags (*
), email/username parts (@
), etc..For example -- If you use
encodeURI()
,[email protected]/?email=me@home
will not properly send the second@
to the server, except for your browser handling the compatibility (as Chrome naturally does often).