有些特殊符号在URL是不能直接传递的,所以之前一直是encodeURI 进行转义,而也没遇到什么问题,可能是之前所涉及到的特殊符号较少的原因吧,最近在项目中发现了一个问题,在url中参数值含有#号的数据会被莫名其妙的截断,第一反应就是看一下是否有使用转义方法encodeURI 。发现是有用,但却无效,查了资料后才知道,原来encodeURI 不是万能的,且js不止这个转义方法,其他方法以前也用过,只是习惯用encodeURI 。做下笔记,以免再次遗忘。
可以采用JS的编码方法:
1. escape - 采用ISO Latin字符集对指定的字符串进行编码。不会被此方法编码的字符: @ * / +
2. encodeURI - 把URI字符串采用UTF-8编码格式转化成escape格式的字符串不会被此方法编码的字符:! @ # $& * ( ) = : / ; ? + '
3. encodeURIComponent - 把URI字符串采用UTF-8编码格式转化成escape格式的字符串。不会被此方法编码的字符:! * ( ) '