var myUrl=“ http://example.com/index.html?param=1-anotherParam=2 "; var myOtherUrl=“ http://example.com/index.html?url= “+myUrl;
-
36 试着调查一下 编码URI() 和 解码URI() . – 扎克人类 评论 2008年12月2日2:39 -
1 请参见 JavaScript urlencode函数 . – 亚尼 评论 2011年6月30日16:40 -
1 您可以在此处使用此工具: phillihp.com/toolz/url-encode-decode – 费城 评论 2012年9月18日2:13 -
4 编码URI组件() – 安得烈 评论 2018年3月2日18:52 -
1 请去看看 这个答案 因为它是唯一一个使用现代javascript功能的浏览器(除了Internet Explorer外,其他任何浏览器都支持)。 – 熨斗9 评论 2021年6月2日9:44
22答案
var myOtherUrl= " http://example.com/index.html?url= “+encodeURI组件(myUrl);
-
14 -
14 -
19 -
6 -
4
转义() 将不会编码: @*/+ 编码URI() 将不编码: ~!@#$&* ()=:/,;?+' 编码URI组件() 将不编码: ~!* ()'
-
89 -
8 -
4 -
16 -
4
const value=encodeURIComponent(value).replaceAll(“%20”,“+”); 常量url=' http://example.com?lang=en&key= '+值
const escapedValue=encodeURIComponent(value).replaceAll(“%20”,“+”); const escapedFolder=encodeURI组件(“我的文件夹”);// 无需更换 常量url=` 网址:http://example.com/ ${escapedFolder}/? myKey=${escapedValue}`;
-
26 请注意,您只应在第一个问号(URL的“查询”部分)后面用+符号替换%20。 假设我想浏览到 http://somedomain/this网址 dir有空格/info.php? a=也有空格 。应将其转换为: http://somedomain/this%20dir%20has%spaces/info.php?a=this%20has%20also%20spaces 但许多实现都允许将查询字符串中的“%20”替换为“+”。 然而,您不能在URL的路径部分将“%20”替换为“+”,这将导致“未找到”错误,除非您的目录具有 + 而不是空格。 评论 2013年1月20日1:08 -
-
-
1 @njzk2不幸 encodeURI组件(“+”) 会给你 %2B型 ,所以您必须使用两个正则表达式。。。 我想这就是为什么它能起作用的原因,因为“+”是“”,最终编码不同。 – 泰勒 评论 2014年6月2日18:17 -
1
现代解决方案(2021年)
const queryParams={param1:“value1”,param2:“value2”} const queryString=新URLSearchParams(queryParams).toString() //'param1=value1¶m2=value2'
对于您的具体示例,您可以这样使用:
const myUrl=“ http://example.com/index.html?param=1&anotherParam=2 "; const myOtherUrl=新URL(“ http://example.com/index.html "); myOtherUrl.search=新URLSearchParams({url:myUrl}); 控制台.log(myOtherUrl.toString());
qs.stringify({a:“1=2”,b:“测试1”});// 获得a=1%3D2&b=测试+1
$.param({a:“1=2”,b:“Test 1”})//获取a=1%3D2&b=Test+1
const baseURL=' http://example.com/index.html '; const myUrl=新URL(baseURL); myUrl.searchParams.append('param','1'); myUrl.searchParams.append('otherParam','2'); const myOtherUrl=新URL(baseURL); myOtherUrl.searchParams.append('url',myUrl.href); console.log(myUrl.href); //输出: http://example.com/index.html?param=1&anotherParam=2 console.log(myOtherUrl.href); //输出: http://example.com/index.html?url=http%3A%2F%2example.com%2Findex.html%3param%3D1%26anotherParam%3D2 控制台.log(myOtherUrl.searchParams.get('url')); //输出: http://example.com/index.html?param=1&anotherParam=2
const-params=新URLSearchParams(myOtherUrl.search); console.log(params.get('url')); //输出: http://example.com/index.html?param=1&anotherParam=2
var myOtherUrl=“ http://example.com/index.html?url= “+encodeURI组件(myUrl);
函数urlencode(str){ str=(str+'').toString(); //在PHP的未来版本中应该允许不转义颚化符(如下所示),但如果您想反映当前的 //PHP行为,您需要在下面添加“.replace(/~/g,'%7E');”。 返回encodeURIComponent(str) .replace(“!”,“%21”) .替换('\','%27') .replace(“(”,“%28”) .replace(')',“%29”) .替换('*','%2A') .replace(“%20”,“+”); }
编码URI()
编码URI组件()
什么是URL编码:
console.log(encodeURIComponent('?notEncoded=&+'));
为什么需要URL编码:
如何在JavaScript中实现URL编码:
编码URI组件() :将URI的一个组件作为参数,并返回编码的URI字符串。 编码URI() :将URI作为参数,并返回编码的URI字符串。
示例和注意事项:
//对于整个URI,不要使用encodeURIComponent,它将转换 ///字符和URL无法正常工作 console.log(encodeURIComponent(“ http://www.random.com/specials&char.html ")); //而是对整个URL使用encodeURI console.log(encodeURI(“ http://www.random.com/specials&char.html "));
encodeURI组件 在您想要编码的URL的特定部分。 编码URI 在您要编码的整个URL上。
encodeURI(“abc%20xyz 123”)//错误:“abc/2520xyz%20123” encodeURI(decodeURI(“abc%20xyz 123”)//更正:“abc+20xyz%20123”
子装饰=“!”/“$”/“&”/“'”/“(”/“)” / "*" / "+" / "," / ";" / "="
保留字符的目的是提供一组可与URI中的其他数据区分的分隔字符。
为了更严格地遵守RFC 3986(保留!、'、(、)和*),即使这些字符没有正式的URI分隔用途,也可以安全地使用以下字符:
函数fixedEncodeURIComponent(str){ return encodeURIComponent(str).replace(/[!'()*]/g,函数(c){ 返回“%”+c.charCodeAt(0).toString(16); }); }
函数fixedEncodeURIComponent(str){ return encodeURIComponent(str).replace(/[!'()]/g,escape).replay(/\*/g,“%2A”); }
-
你能解释一下你的答案吗? 例如,为什么是神奇的十六进制数“2A”? (即“*”( 星号 )ASCII格式。) 请回复 编辑(更改)您的答案 ,不在评论中(******************** 没有 ********************“编辑:”、“更新:”或类似内容-答案应该像今天写的一样出现)。 – 彼得·莫特森 评论 2022年12月8日0:39
性能
结论
细节
函数A(url){ 返回转义(url); } 函数B(url){ 返回encodeURI(url); } 函数C(url){ return encodeURIComponent(url); } 函数D(url){ return new URLSearchParams({url}).toString(); } 函数E(url){ return encodeURIComponent(url).replace(/[!'()]/g,escape).replay(/\*/g,“%2A”); } 函数F(url){ return encodeURIComponent(url).replace(/[!'()*]/g,函数(c){ 返回“%”+c.charCodeAt(0).toString(16); }); } // ---------- //测试 // ---------- var myUrl=“ http://example.com/index.html?param=1&anotherParam=2 "; 【A、B、C、D、E、F】 .forEach(f=>控制台.log(`${f.name}?url=${f(myUrl).replace(/^url=/,')}`));
此片段仅显示所选解决方案的代码
回应。 Headers[“land”]=“login”;
$(函数(){ var$document=$(文档); $document.ajaxSuccess(函数(e,响应,请求){ var land=响应.getResponseHeader('land'); var redrUrl='/login? ReturnUrl=“+encodeURIComponent(window.location); if(陆地){ if(land.toString()===“登录”){ window.location=刷新URL; } } }); });
<! DOCTYPE html> <html> <头部> <样式> 文本区域{ 宽度:30%; 高度:100px; } </style> <脚本> //将字符串编码为Base64 函数编码() { var txt=文档.getElementById(“txt1”).value; var结果=btoa(txt); document.getElementById(“txt2”).value=结果; } //将Base64解码回原始字符串 函数decode() { var txt=文档.getElementById(“txt3”).value; var结果=atob(txt); document.getElementById(“txt4”).value=结果; } </script> </头> <body> <div> <textarea id=“txt1”>要解码的一些文本 </text区域> </div> <div> <input type=“button”id=“btnencode”value=“Encode”onClick=“Encode()”/> </div> <div> <textarea id=“txt2”> </text区域> </div> <br/> <div> U29tZSB0ZXh0IHRvIGRlY29kZQ== </text区域> </div> <div> <input type=“button”id=“btndecode”value=“解码”onClick=“Decode()”/> </div> <div> <textarea id=“txt4”> </text区域> </div> </body> </html>
var url=$(位置).attr('href');// 获取当前URL //或者 var url='文件夹/index.html? param=#23dd&noob=yes';// 或指定一个 var encodedUrl=编码URI组件(url); console.log(encodedUrl); //输出文件夹%2Index.html%3Fparam%3D%2323dd%26noob%3Yes
函数encodeUrl(url) { 字符串arr[]=url.split(“/”); 字符串编码Url=“”; for(int i=0;i<arr.length;i++) { encodedUrl=编码Url+ESAPI.encoder().encodeForHTML(ESAPI.编码器().engodeForURL(arr[i])); 如果(i<arr.length-1)encodedUrl=encodedUrl+“/”; } 返回url; }
var myOtherUrl=“ http://example.com/index.html?url= “+encodeURIComponent(myUrl).replace(/%20/g,'+');
let name=`bbb`; params=`name=${name}`; var myOtherUrl=` http://example.com/index.html?url= ${encodeURIComponent(params)}`; 控制台.log(myOtherUrl);