javascript:如何替换特殊符号/字符,这些特殊符号/字符会破坏URL中的查询字符串

问题描述

我的URL中包含此组件-

var myType="Air B&B";
var myID="RestInPeace";
var myURL="http://myhome.com?type="+myType+"&name="+myID;
alert(myURL);  //http://myhome.com?type=Air B&B&id=RestInPeace

myType中的'&'打破了您的查询:

http://myhome.com?type=Air B&B&id=RestInPeace

页面依靠ID定位记录。它不会得到它,因为类型内的'&'打破了查询! myType中的所有uri敏感字符都需要处理,以免中断查询。

解决方法

由于第二个参数不是加载记录的关键,因此我将牺牲类型参数中的'&'。

这些字符将破坏您在URI中的查询:$&:'“ [] + {} 。请参见下文,通过在[]中转义这些符号来进行快速替换:表示其中的任何一个[]

中的那些符号
var myType="Air B&B";
var myID="RestInPeace";
var myURL="http://myhome.com?type="+myType.replace(/[\$\&\'\"\:\<\>\[\]\{\}\+]/g,'^')+"&name="+myID;
alert(myURL);  //http://myhome.com?type=Air B^B&name=RestInPeace

现在,替换myType中的'&'。并保留查询。

http://myhome.com?type=Air B^B&name=RestInPeace

,

最好的方法是使用URL()。 使用

创建一个新URL
var myURL = new URL('http://myhome.com');

然后追加搜索参数,例如

var myType="Air B&B";
var myID="RestInPeace";
myURL.searchParams.set('type',myType);
myURL.searchParams.set('name',myID);

这将返回类似对象

hash: ""
host: "myhome.com"
hostname: "myhome.com"
href: "http://myhome.com/?type=Air+B%26B&name=RestInPeace"
origin: "http://myhome.com"
password: ""
pathname: "/"
port: ""
protocol: "http:"
search: "?type=Air+B%26B&name=RestInPeace"
searchParams: URLSearchParams {}
username: ""

因此基本上,它将自动保留您的查询

,

自版本1.5(ECMA-262 3rd edition,1999年12月起)以来,JavaScript正是为此功能支持功能encodeURI()encodeURIComponent()。我不知道你们两个人怎么能监督这个。

另请参阅问题Should I use encodeURI or encodeURIComponent for encoding URLs?

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...