`
rocket
  • 浏览: 92285 次
  • 性别: Icon_minigender_1
  • 来自: 金城
社区版块
存档分类
最新评论

ajax中文上传编码问题

阅读更多
上次提出了一个ajax下载中文编码问题,这次有遇到了ajax的上传中文乱麻问题
继续bs各种编码:)

遇到问题:在使用xhr发出请求时,请求的url中参数带中文,这时在后台解析request得不到中文
如:
request = new ActiveXObject("Microsoft.XMLHTTP");
request.open("GET", url);中我的url需要带中文参数
直接加参数是在后台解析不出来的,所以我使用方法对url进行编码转换
<!---->request = new ActiveXObject("Microsoft.XMLHTTP");
request.open(
"GET", uriFunc());

//省略了对象定义
//
..


function uriFunc() {
    
var separator = "?";
    
if (uri.indexOf("?">= 0)
        separator 
= "&";        
    
return uri + separator + paramName + "=" + escape(inputField.value,'utf-8');
  }
然后就要在后台进行解码了
以为没法直接从request中取到编码字符串,所以使用方法先取出url,然后再取出url的参数进行解码
取出url,以及取参数方法
<!---->String exfirstword = getUrlParameter(unescape(request.getQueryString()),"excludeuser"); 
 

 
public String getUrlParameter(String str,String targetstr){
          
          String[] stringarray 
= str.split("&")  ;
            
            
for(int i=0;i<stringarray.length;i++){
               
if(stringarray[i].startsWith(targetstr)){
                   stringarray
=stringarray[i].split("=");    
                   
break;
               }
            }
            
return stringarray[1];
      }

 
//解码方法
 
//以下是对js的escape进行解码
      private final static byte[] val = { 0x3F0x3F0x3F0x3F0x3F0x3F,
          
0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,
          
0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,
          
0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,
          
0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x000x01,
          
0x020x030x040x050x060x070x080x090x3F0x3F0x3F,
          
0x3F0x3F0x3F0x3F0x0A0x0B0x0C0x0D0x0E0x0F0x3F,
          
0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,
          
0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,
          
0x3F0x3F0x3F0x0A0x0B0x0C0x0D0x0E0x0F0x3F0x3F,
          
0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,
          
0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,
          
0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,
          
0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,
          
0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,
          
0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,
          
0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,
          
0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,
          
0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,
          
0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,
          
0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,
          
0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,
          
0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F,
          
0x3F0x3F0x3F0x3F0x3F0x3F0x3F0x3F };

     
      
/**
       * 解码 说明:本方法保证 不论参数s是否经过escape()编码,均能得到正确的“解码”结果
       *
       * 
@param s
       * 
@return
       
*/
      
public static String unescape(String s) {
      StringBuffer sbuf 
= new StringBuffer();
      
int i = 0;
      
int len = s.length();
      
while (i < len) {
      
int ch = s.charAt(i);
      
if ('A' <= ch && ch <= 'Z') { // 'A'..'Z' : as it was
      sbuf.append((char) ch);
      } 
else if ('a' <= ch && ch <= 'z') { // 'a'..'z' : as it was
      sbuf.append((char) ch);
      } 
else if ('0' <= ch && ch <= '9') { // '0'..'9' : as it was
      sbuf.append((char) ch);
      } 
else if (ch == '-' || ch == '_' // unreserved : as it was
      || ch == '.' || ch == '!' || ch == '~' || ch == '*'
      
|| ch == '\'' || ch == '(' || ch == ')') {
      sbuf.append((char) ch);
      } 
else if (ch == '%') {
      
int cint = 0;
      
if ('u' != s.charAt(i + 1)) { // %XX : map to ascii(XX)
      cint = (cint << 4| val[s.charAt(i + 1)];
      cint 
= (cint << 4| val[s.charAt(i + 2)];
      i 
+= 2;
      } 
else { // %uXXXX : map to unicode(XXXX)
      cint = (cint << 4| val[s.charAt(i + 2)];
      cint 
= (cint << 4| val[s.charAt(i + 3)];
      cint 
= (cint << 4| val[s.charAt(i + 4)];
      cint 
= (cint << 4| val[s.charAt(i + 5)];
      i 
+= 5;
      }
      sbuf.append((
char) cint);
      } 
else { // 对应的字符未经过编码
      sbuf.append((char) ch);
      }
      i
++;
      }
      
return sbuf.toString();
      }

这时候得到的exfirstword 就是正确的中文了
问题解决

分享到:
评论
1 楼 Byron 2008-05-14  
恩!我这几天也碰到了这个问题!做法也是跟你一样的!在前台的JS中将数据用escape加工一下,不过我是用了双重加工,escape(escape()),然后在后台用自定义的unescape()进行解码!现在我在找关于Ajax上传文件的资料!偶尔看到了这里!LZ有这方面的资料不?

相关推荐

    AJAX技术使用XMLHttpRequest对象传递参数的中文乱码问题

    综上所述,解决AJAX技术使用`XMLHttpRequest`对象传递参数时出现的中文乱码问题,关键在于保持客户端与服务器端的编码一致性。通过合理设置请求头、使用适当的编码和解码函数,可以有效避免此类问题的发生。此外,在...

    使用ajax可以传中文参数

    #### Ajax中文参数问题概述 在使用Ajax进行数据传输时,如果请求中包含了中文字符,由于编码方式的不同,这些中文字符在服务器端解析时可能会出现乱码现象。这主要是因为客户端(浏览器)与服务器端之间对于字符集...

    ajax请求serlvet传送汉字

    默认情况下,Ajax请求的数据是以UTF-8编码的,而Servlet默认的编码可能不是UTF-8,这可能导致汉字传输过程中出现乱码。为了解决这个问题,我们需要在Ajax请求时指定编码方式,并确保Servlet接收时也使用相同的编码。...

    Ajax中文问题

    **Ajax中文问题** Ajax(Asynchronous JavaScript and XML)是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新。在网页应用中,Ajax可以创建...

    smartupload多文件上传解决中文乱码

    然而,正如标题所提到的,SmartUpload在处理中文文件名时可能会出现乱码问题,这主要源于字符编码不一致导致的。 在描述中,提到了作者已经成功解决了这个问题。通常解决此类问题的方法包括: 1. **设置正确的字符...

    Ajax过滤器

    总的来说,Ajax过滤器是一种解决Web应用中中文乱码问题的有效手段,通过在请求和响应之间添加一层处理,可以确保数据以正确的编码进行传输,提高应用的兼容性和用户体验。在实际项目中,根据具体需求,可能还需要...

    java 上传、下载 组建(源码) 彻底解决乱码问题。

    这个压缩包提供的组建源码,专门针对中文乱码问题进行了优化,基于jspsmartupload库进行了改进,确保了在处理文件名时不会出现编码问题,从而提高了用户体验。 首先,我们要了解Java中的文件上传原理。在HTTP协议中...

    Ajax 程序开发中常见问题

    只有这样才能确保XML文档的字符集被正确处理,避免乱码问题。 5. 在进行Ajax表单提交时,需要设置正确的Content-Type头部信息,以便告诉服务器发送的数据类型。例如: xmlHttp.setRequestHeader("Content-Type", ...

    ajax发送xml-java解析xml.doc

    在Java服务器端,首先设置`Request.ContentEncoding`来处理可能的中文乱码问题。接着,使用`XmlDocument`类创建一个新的XML文档对象,并使用`Load()`方法从请求的输入流中加载接收到的XML数据。这样,XML数据就被...

    ajax提交到servelt获取参数有乱码的解决方法

    通过这些步骤,我们可以确保在Ajax通信中中文参数的正确传输和解码,避免出现乱码问题。记住,对于不同的字符集,如GBK和GB2312,选择合适的编码转换策略至关重要。在实际开发中,推荐使用UTF-8作为统一的编码标准,...

    asp_Ajax_upload

    GB2312是中国大陆的简体中文编码标准,主要包含常用汉字。项目中提及UTF-8编码,意味着代码可能已做好国际化的准备,但用户可以根据需求调整为GB2312以适应国内环境。 4. **缩略图生成**:文件上传完成后,通常会...

    ajax中使用javascript的send方法post参数

    通过本文的介绍,我们了解了如何在AJAX中使用JavaScript的`send`方法来发送POST请求,并且详细探讨了如何设置正确的HTTP头部信息以避免中文乱码等问题。此外,还介绍了如何在服务器端使用`Request.Form`和`Request....

    PHP+Ajax网站开发典型实例-源代码

    实例3 中文时间显示实例 实例4 删除字符串中的空白 实例5 字符串反转 实例6 字符串加密 实例7 检查日期的有效性 实例8 简单猜数游戏 实例9 验证信用卡号 实例10 计算两个数组并、交和差 实例11 数组排序 第2章 PHP...

    jquery fileupload上传百分比 JAVA版解决中文乱码

    本篇将详细探讨如何在Java环境下使用jQuery File Upload实现文件上传并处理中文文件名的乱码问题。 首先,jQuery File Upload的核心原理是利用HTML5的File API进行异步文件上传。它通过AJAX请求将文件分块上传到...

    jquery uploadify scriptData 中文乱码

    通过上述步骤,你应该能够解决使用jQuery Uploadify时`scriptData`中的中文乱码问题。在实际应用中,可能需要根据具体环境和服务器端语言进行微调,确保整个流程中的字符编码一致。如果仍然遇到问题,检查浏览器的...

    ASP.NET jquery.uploadify文件上传控件测试项目(已解决中文乱码)

    这个测试项目已经解决了中文乱码问题,这意味着它能够正确处理含有中文字符的文件名,这对于中文环境下的应用来说至关重要。 首先,我们需要理解jQuery.uploadify的工作原理。它利用HTML5的File API和Ajax技术,...

    php多文件上中文无乱码

    在PHP开发中,文件上传是一项常见的任务,尤其是处理包含中文字符的文件名时,需要确保在上传过程中不会出现乱码问题。"php多文件上中文无乱码"这个标题所涉及的知识点主要涵盖PHP文件上传机制、字符编码处理以及...

    【中文】【 Ajax高级程序设计 】【exe】【1.79 MB】

    尽管部分文本似乎是乱码或者非中文字符,但我们可以从标题、描述以及部分可辨识的信息中提炼出与Ajax相关的知识点。 ### 一、Ajax简介 Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的...

    java上传的一个小案例 无刷新提示,无乱码哦

    3. **防止乱码问题** 中文文件名乱码是文件上传时常见的问题,主要源于字符编码的不一致。Java服务器端处理文件名时,应确保正确设置字符编码。在读取或写入文件名时,需使用UTF-8编码,因为它是支持最多语言的标准...

    tableExport + base64 excel、png导出无中文乱码

    本话题主要聚焦于"tableExport + base64"的使用,特别是涉及到中文导出时可能出现的乱码问题,以及不支持IE浏览器的情况。 首先,`tableExport`插件通过将HTML表格转换为对应格式的数据,然后以Base64编码的形式...

Global site tag (gtag.js) - Google Analytics