`
lv12312
  • 浏览: 10732 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类

处理URL参数中包含有中文参数URL字符串问题

 
阅读更多

       当URL参数中含有URL字符串的时候,而该字符串还包含有中文,这个时候处理起来会比较恶心,通过yi一段时间摸索,发现可以用base64来解决这个问题:

背景:由于需要请求目标应用不支持JSONP,需要使用另外一个应用做一个中转。客户端是UTF-8编码,作为中转的应用是GBK编码,需要请求的目标应用又是需要UTF-8编码;

 

常规的思路是:

前台传输来的相应编码的URL,后台就用该编码的解码,URLDecoder.decode(params,"encodeType");

但是一般的MVC框架或者应用服务器,在绑定参数的过程中都解码了一次,前台如果想要让后端按照指定编码格式手动解码,需要encodeURIComponent两遍,第一遍框架或应用服务器解码,第二遍自己手动解码

但是这里出现的问题不常规,使用常规方式又比较麻烦,所以采取比较猥琐的方式

例如:如果想要发送这样一个请求

http://localhost/mobile/getInfo.json?url=http://localhost2/mobile/getSomething.json?params=测试

前台Javascript:

var urlEncoded = Base64.encode(encodeURI(url));
//用base64来编码,encodeURI也将中文字符和其他一些字符给一并处理了
//Then, ...使用Ajax发送请求

    这里用到了一个Base64 Javascript库,地址:https://github.com/dankogai/js-base64

   

Java端的话,使用base64解码之后就得到了encodeURI之后的URI了,直接使用HTTPClient来发送请求

 

import org.apache.commons.codec.binary.Base64;
//推荐使用commons-codec包,不要使用sun.misc.base64decoder

String urlRaw = request.getParameter("url");
String url = new String(Base64.decodeBase64(urlRaw.getBytes()));

//Then, 就可以使用HTTPClient来请求数据
//....
0
3
分享到:
评论
7 楼 m635674608 2013-09-28  
lv12312 写道
m635674608 写道
lv12312 写道
m635674608 写道
URLDecode解码,解出来的是GBK编码??? 不是吧??
我的意思不是这个,URLDecode是随便可以按照任何编码格式解码的,不限定是GBK,这是我应用中这么做的,按照UTF-8的格式URLDecoder.decode(url,"utf-8");应用的编码是GBK的

那你这样不就可以了吗?URLDecoder.decode(url,"gbk")
这样貌似也行,由于项目编码原因,还是需要多次转码,使用Base64之后,就转一次就OK了,虽然这样做稍微猥琐了一点,哈哈

呵呵,方便就好
6 楼 lv12312 2013-09-28  
m635674608 写道
lv12312 写道
m635674608 写道
URLDecode解码,解出来的是GBK编码??? 不是吧??
我的意思不是这个,URLDecode是随便可以按照任何编码格式解码的,不限定是GBK,这是我应用中这么做的,按照UTF-8的格式URLDecoder.decode(url,"utf-8");应用的编码是GBK的

那你这样不就可以了吗?URLDecoder.decode(url,"gbk")
这样貌似也行,由于项目编码原因,还是需要多次转码,使用Base64之后,就转一次就OK了,虽然这样做稍微猥琐了一点,哈哈
5 楼 m635674608 2013-09-28  
lv12312 写道
m635674608 写道
URLDecode解码,解出来的是GBK编码??? 不是吧??
我的意思不是这个,URLDecode是随便可以按照任何编码格式解码的,不限定是GBK,这是我应用中这么做的,按照UTF-8的格式URLDecoder.decode(url,"utf-8");应用的编码是GBK的

那你这样不就可以了吗?URLDecoder.decode(url,"gbk")
4 楼 lv12312 2013-09-27  
m635674608 写道
URLDecode解码,解出来的是GBK编码??? 不是吧??
我的意思不是这个,URLDecode是随便可以按照任何编码格式解码的,不限定是GBK,这是我应用中这么做的,按照UTF-8的格式URLDecoder.decode(url,"utf-8");应用的编码是GBK的
3 楼 m635674608 2013-09-27  
URLDecode解码,解出来的是GBK编码??? 不是吧??
2 楼 lv12312 2013-09-27  
m635674608 写道
URLdecode也可以解决啊
我开始也是这么思考的,用encodeURIComponent弄两遍,然后传到后台URLDecode解码,解出来的是GBK编码,而需要请求的应用又是UTF-8的,又要转码,太麻烦了;所以用了这种非常规的思维
1 楼 m635674608 2013-09-27  
URLdecode也可以解决啊

相关推荐

    swift-url分类解决URL里面的空格中文及其他特殊字符问题

    在Swift编程中,URL(统一资源定位符)是用于标识互联网上特定资源的字符串,它包含协议、主机名、路径、查询参数等信息。然而,URL中可能存在一些不合法的字符,比如空格、中文字符以及其他特殊字符,这些字符可能...

    jquery获取URL中参数解决中文乱码问题的两种方法

    以上两种方法在处理URL中的参数时,需要注意如果参数值中包含中文字符,那么在发送参数之前需要对其进行URL编码(使用 `encodeURI` 函数),在接收参数之后需要对URL编码的字符串进行解码(使用 `decodeURI` 函数)...

    php获取URL中带#号等特殊符号参数的解决方法

    然而,URL参数中可能包含特殊字符,如井号(#)和其它符号,它们在URL中扮演特定的角色,可能导致无法直接获取预期的参数值。本篇知识点将详细探讨如何在PHP中获取带有特殊符号,如井号(#)的URL参数,并介绍如何使用...

    提取字符串中url域名

    `:根据编译后的正则表达式创建一个`Matcher`对象,用于与传入的URL字符串进行匹配。 - `if (matcher.find())`:如果匹配成功,则执行下一行代码。 - `return matcher.group();`:返回匹配到的第一个结果。如果...

    URL中如果含有中文等非ASCII字符

    2. **检查并验证**:在接收URL参数时,应使用相应的解码函数来处理可能的编码字符,以确保数据的准确性。 3. **明确编码方式**:在涉及到非ASCII字符的应用中,应明确指定字符集,以减少解析过程中的歧义。 #### 六...

    JSP中js传递和解析URL参数以及中文转码和解码问题.docx

    ### JSP中JS传递与解析URL参数及中文转码解码问题详解 #### 一、引言 在Web开发中,尤其是使用Java Server Pages (JSP)进行开发时,经常需要处理URL中的参数,包括参数的传递、解析以及对中文等特殊字符的处理。...

    URL中文字符

    例如,对于字符串“URL中的中文字符”,我们可以通过以下代码进行转码: ```javascript let url = "URL中的中文字符"; let encodedUrl = encodeURIComponent(url); console.log(encodedUrl); // 输出 "URL%E4%B8%AD...

    Lotus关于获取URL字符串参数

    ### Lotus中获取URL字符串参数的方法 在Web应用开发中,从URL链接中提取参数是非常常见的需求。这在基于浏览器的服务架构(例如B/S)中尤为重要,因为它有助于动态地展示页面内容或者执行某些特定操作。在Java、PHP...

    js获取url参数

    - **错误处理**:可以在函数中加入更详细的错误处理逻辑,比如当URL中不存在查询字符串时返回提示信息。 - **多参数支持**:可以进一步扩展函数,使其能够同时处理多个参数的获取。 #### 六、总结 通过上述分析,...

    将内容中的符合url格式的字符串转换为超链接(JAVA版)

    在Java编程中,将文本内容中的符合URL格式的字符串转换为超链接是一项常见的需求,特别是在处理用户生成内容或网络爬虫应用中。本教程将详细讲解如何使用Java实现这一功能,主要涉及URL正则表达式匹配和字符串处理...

    LoadRunner中转换字符串到URL编码

    在LoadRunner的脚本编写过程中,我们经常需要处理字符串,尤其是将普通字符串转换为URL编码格式,以确保数据正确无误地发送到服务器。本文将详细介绍如何在LoadRunner中进行URL编码,以及提供的C代码和转换工具。 ...

    JavaScript的一些工具函数的封装包括url的参数处理数字字符串日期等相关操作函数

    这个工具库可能包含了一个`parseUrlParams`函数,用于从URL字符串中提取键值对,并将其转化为对象;反之,也可能有一个`createUrlQueryString`函数,用于将对象转化为URL查询字符串,方便进行HTTP请求。 其次,数字...

    检查网址URL中字符串类型及个数(ASP防注入)

    '一个用于检查网址URL中字符串类型及个数的函数,Write By Msdiy. '调用效果 response.Write CheckQstring("id,int,0||title,string,10",true,true,true) '具体用法如下 '参数1: Qstrings 例如 "newsid,int,0||...

    jsp使用URL编码传递中文参数问题.doc

    在JSP开发中,处理URL编码传递中文参数是常见的需求,尤其是在构建动态网页时。这个问题主要涉及到字符编码的转换,因为不同的编码标准可能导致乱码。以下是对这个主题的详细解释: 1. **URL编码**:URL(统一资源...

    VC++如何获得浏览器窗口的地址栏URL字符串

    在VC++编程环境中,获取浏览器窗口的地址栏URL字符串是一个常见的需求,特别是在开发与浏览器交互的应用程序时。本文将详细讲解如何使用C++来实现这一功能,主要关注于与Internet Explorer(IE)浏览器的交互。 ...

    PHP 解析URL和URL参数拆分与合并

    本文将深入探讨如何解析URL,拆分URL参数以及如何合并它们。我们还将通过一个名为`demo.php`的示例文件来展示实际操作。 首先,让我们了解URL的基本结构: ``` scheme://authority/path?query#fragment ``` - `...

    常用字符串处理函数-求子字符串,字符串分割,编码转换.

    ### 常用字符串处理函数:求子字符串、字符串分割与编码转换 在现代编程语言如JavaScript中,字符串处理是日常开发中极为常见的任务之一。本文将深入探讨几个常用的字符串处理函数,包括如何求取子字符串、进行字符...

    Url参数获取工具.zip

    查询字符串就是URL中包含参数的部分,通过`Uri.Query`属性可以获取到。然后,利用`System.Web.HttpUtility.ParseQueryString`方法,可以将查询字符串转换为一个`NameValueCollection`对象,便于遍历和访问参数。 ...

    JS实现URL编码转换中文

    // 假设有一个包含中文字符的字符串 var chineseText = "你好,世界!"; // 使用encodeURIComponent进行编码 var encodedText = encodeURIComponent(chineseText); console.log("编码后的结果:" + encodedText); /...

    js获取url参数.rar url参数获取

    在JavaScript编程中,获取URL参数是一项常见的任务,特别是在构建动态Web应用时。URL(Uniform Resource Locator)是网页的地址,而URL参数则是附加在URL后面,用于传递额外信息的键值对。这些参数通常以问号(?)...

Global site tag (gtag.js) - Google Analytics