如何解决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()。 使用
创建一个新URLvar 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?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。