钉钉小程序之参数有中文。encodeUri以及encodeURIComponent详解

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是对的,为什么不调用接口,很不解!!!!!

 

 

posted @ 2019-05-23 18:12  初学者啊啊  阅读(4434)  评论(0编辑  收藏  举报