1、encodeUri和encodeURIComponent的用法以及区别
encodeUri是对整个uri进行编码,encodeURIComponent 是对.com后面的一段进行编码。
encodeUri不会对本身属于uri的特殊字符进行编码(: / # ?),encodeURIComponent是对所有非标准字符进行编码
看如下例子:
var uri = "http://www.wrox.com/illegal value.htm#start"; //"http://www.wrox.com/illegal%20value.htm#start" alert(encodeURI(uri)); //"http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start" alert(encodeURIComponent(uri))
使用encodeUri编码后的结果是除了空格之外的其他字符都原封不动,只有空格被替换成了20%,而encodeURIComponent则会使用对应的编码替换所有非字母数字字符。
所以对整个URI使用encodeUri,而对附加在URI后面的字符串使用encodeURIComponent。
在日常,我们使用encodeURIComponent较多。
2、钉钉小程序关于encodeURIComponent的坑
如果小程序的接口参数里有中文,如果不进行编码,会报错“有不合法的字符”,需要进行编码,关键是不会调用接口!!!!
如果是关于url不合法的,钉钉小程序不会调用接口。
一开始我觉得,参数有中文,使用encodeURIComponent足以,毕竟它只对uri后面的非法字符串编码。
当我使用完encodeURIComponent后,依旧没有调接口,同时不报“有不合法的字符”这个错,这说明字符编码起了作用,没有不合法的字符。
但是报了一个error:19的错误,没有指明错误原因,很无脑。
很明显,不是不合法的字符的错,这时候就会去检查参数什么的,绕了一大圈后,我试了下encodeUri,然后就成功了。
针对这一点,真的要吐槽下钉钉,error:19是个什么鬼,而且还不调用接口,即使参数错了或者格式不对,看日志也能得出结论,这是个什么鬼。况且uri是对的,为什么不调用接口,很不解!!!!!