最近在使用 url 的 queryString 传递参数时,因为参数的值,被DES加密了,而加密得到的是 Base64的编码字符串
类似于:
za4T8MHB/6mhmYgXB7IntyyOUL7Cl++0jv5rFxAIFVji8GDrcf+k8g==
显然 这里面含有了 特殊字符: / + = 等等,如果直接通过url 来传递该参数:
url = "xxxxx?param=" + "za4T8MHB/6mhmYgXB7IntyyOUL7Cl++0jv5rFxAIFVji8GDrcf+k8g==";
那么在服务端获得 param 会变成类似于下面的值:
"za4T8MHB/6mhmYgXB7IntyyOUL7Cl 0jv5rFxAIFVji8GDrcf k8g=="
我们看到 三个 + 号消失了。
其原因就是:如果url参数值含有特殊字符时,需要使用 url 编码。
url = "xxxxx?param=" + URLEncoder.encode("xxx", "utf-8");
然后服务端获取时:
String param = URLDecoder.decode(param, "utf-8");
这样才能获得正确的值: "za4T8MHB/6mhmYgXB7IntyyOUL7Cl++0jv5rFxAIFVji8GDrcf+k8g=="
其实 js 中也有类似功能的函数:
参见:js中编码函数:escape,encodeURI,encodeURIComponent
注意事项:
URLEncoder should be the way to go. You only need to keep in mind to encode only the individual query string parameter name and/or value, not the entire URL, for sure not the query string parameter separator character & nor the parameter name-value separator character =
String q = "random word 拢500 bank $"; String url = "http://example.com/query?q=" + URLEncoder.encode(q, "UTF-8");
URLEncoder 必须 仅仅 编码 参数 或者参数的值,不能编码整个 url,也不能一起对 param=value 进行编码。而是应该: param=URLEncode(value, "utf-8")
或者 URLEncode(param, "utf-8")=URLEncode(value, "utf-8")
因为 url 中的 & 和 = 他们是作为参数之间 以及 参数和值之间的分隔符的。如果一起编码了,就无法区分他们了。
进一步参考文档:
https://www.talisman.org/~erlkonig/misc/lunatech%5Ewhat-every-webdev-must-know-about-url-encoding/
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对小牛知识库的支持。
通过上面的例子,我们知道可以方便的通过定义方法的参数来处理查询中的参数。除此之外,我们还可以为方法添加某些特定类型的参数(如:Pageable和Sort)来动态的在查询中添加分页和排序。 Example 7. Using Pageable, Slice and Sort in query methods(查询中进行分页和排序) Page<User> findByLastname(String la
正如上面所看到的那样,在您的查询中处理参数,您只需定义方法参数。除了基本的还要识别某些特别的类型像Pageable和Sort这些在你的查询中提供动态的分页和排序。 示例9。使用Pageable,Slice和Sort在查询方法中 Page<User> findByLastname(String lastname, Pageable pageable); Slice
我正在开发Flex Java(客户机-服务器)应用程序,我遇到了一个问题。我向服务器发送路径参数并在JSP上接收它们,有时,这些参数具有特殊字符,如。我有一个我认为常见的问题,那些特殊字符在我的服务器上被错误接收。 我还检查了另一个问题,有同样的问题,比如这个或这个。 我已经尝试使用请求。setCharacterEncoding(“UTF-8”)用于接收参数(第一个问题的答案)。 我还尝试在服务器
本文向大家介绍jsp中URL传递中文参数的处理方法,包括了jsp中URL传递中文参数的处理方法的使用技巧和注意事项,需要的朋友参考一下 在页面的url中使用encodeURI(encodeURI(中文)),对中文进行编码,并在服务器的java程序中使用URLDecoder.decode(中文, "UTF-8")进行解码即可; 如果url中需要传递+、#、?等特殊符号,可以使用encodeURICo
我正在制作一个程序,从传奇联盟api获取数据,它分析你当前的游戏,并向你显示你的对手的名字,等级和东西。但我有一个问题,因为要获得某人的排名,我需要访问一个特定的url,其中包含他的尼克。问题是,一些玩家在他们的刻痕中放置了å、á、è、ö之类的角色,当这种情况发生时,我的程序就会停止工作。我将向您展示我用来实现这一点的部分代码: 这就是它抛出的错误:java。io。IOException:服务器返
在使用Rest Assured时,我正在努力处理查询参数值中的特殊字符。 在url中(如下所示),我必须传递用管道符号“|”分隔的值。我用值|编码符号,但是服务调用没有给出匹配的响应,而是返回默认响应。 http://localhost:8080/api/abc?Id=7325860|XYZ公司 有趣的是,同一个url可以很好地用于任何浏览器rest客户端或其他基于java的解决方案。