`
wangyanlong0107
  • 浏览: 502668 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

【转】利用javascript完成URLEncoding功能

 
阅读更多

日常开发中,经常遇到由于页面不一致,导致由页面表单提交或超连接跳转时中文成了乱码的问题。解决此问题的方法不外乎二:
1.使用统一的页面编码

2.接收参数的时候进行编码转换。

但 是以上两种方法并不是任何时候都能胜任的。本人在开发并维护一个web应用的时候就遇到了这样的问题:在进行系统版本切换时(由.net滚动升级至 java),一个GB2312编码的页面,需要向两个不同的servlet提交请求。一个servlet接收参数使用utf-8编码,另一个使用 GB2312。修改servlet的java代码不太现实,它们都是部署在服务器上的稳定的web应用。统一页面编码就更行不通了,一个网页怎么可能即是 utf-8又是GB2312编码呢?

冥思苦想,想了两个解决方案出来:
1.编写一个独立的servlet作跳板,在其内部进行编码转换
2.写一段javascript来完成编码转换

本来想按照方案1来的,但是发现公司里已经有.net 的牛人写出了javascript脚本,仔细看过不禁拍案叫绝:

<script language="JavaScript" charset="utf-8">   
<!--   
function   utf8(wide)   {   
      var c,s;   
      var enc = "";   
      var i = 0;   
      while(i<wide.length)   {   
          c= wide.charCodeAt(i++);   
          // handle UTF-16 surrogates   
          if(c>=0xDC00 && c<0xE000){
              continue; 
          }
            
          if(c>=0xD800 && c<0xDC00)   {   
              if(i>=wide.length){
                  continue;
              }   
              s= wide.charCodeAt(i++);   
              if(s<0xDC00 || c>=0xDE00){
                  continue;
              }
              c= ((c-0xD800)<<10)+(s-0xDC00)+0x10000;   
          }   
          // output value   
          if(c<0x80){
              enc += String.fromCharCode(c);
          }   
          else if(c<0x800){
              enc += String.fromCharCode(0xC0+(c>>6),0x80+(c&0x3F));
          } 
          else if(c<0x10000){
              enc += String.fromCharCode(0xE0+(c>>12),0x80+(c>>6&0x3F),0x80+(c&0x3F));
          } 
          else{
              enc += String.fromCharCode(0xF0+(c>>18),0x80+(c>>12&0x3F),0x80+(c>>6&0x3F),0x80+(c&0x3F));
          }
      } 
      return enc;   
}   
    
var hexchars = "0123456789ABCDEF";   
    
function toHex(n){   
      return hexchars.charAt(n>>4)+hexchars.charAt(n&0xF);   
}   
    
var okURIchars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";   
    
function encodeURIComponentNew(s)   { 
    //alert(s);
      var s = utf8(s);   
      var c;   
      var enc = "";   
      for(var i=0;i<s.length;i++)   {   
          if(okURIchars.indexOf(s.charAt(i))==-1)   
              enc+="%"+toHex(s.charCodeAt(i));   
          else   
              enc+=s.charAt(i);   
      }
    // document.write(enc);   
      return enc;   
}   
//   -->   
</script>

将如上代码放入GB2312编码的页面,不仅可以进行GB2312->utf-8的转换,还可以进行GB2312->utf-16的转换。

再次感叹javascript的威力!

分享到:
评论

相关推荐

    asp下实现UrlEncoding转换编码的代码

    在ASP(Active Server Pages)中,UrlEncoding是一个关键的编程技术,主要用于处理URL中的特殊字符。这是因为URL(统一资源定位符)中某些字符在传输过程中可能会引起解析问题,比如空格通常会被转换为加号(+)或者...

    MD5算法,URLEncoding,Base64编码,AES,DES,DESede,RSA加密解密工具类和使用实例

    本话题主要涉及了MD5算法、URLEncoding、Base64编码以及几种对称和非对称加密算法AES、DES、DESede和RSA的工具类与使用实例。接下来,我们将深入探讨这些知识点。 1. **MD5算法**:MD5(Message-Digest Algorithm 5...

    Javascript 实用小技巧

    在本篇标题为“Javascript实用小技巧”的文章中,作者分享了一系列实用的JavaScript代码片段,旨在帮助学习JavaScript的人士掌握一些提高编程效率的技巧。文章内容涉及了JavaScript的Function对象的apply和call方法...

    Javascript技术技巧大全(五)

    虽然这不是JavaScript的标准功能,但在VBScript中,它可以用来检测特定组件是否已安装在用户的计算机上。这通常用于确保用户有执行某些操作所需的软件环境。 6. **CheckURL函数**: 这是一个JavaScript函数,用于...

    C++转UTF8编码.txt

    接下来的`urlEncoding`函数是核心部分,它接受一个`wxString`类型的参数`sIn`,并返回一个新的`wxString`对象,该对象包含了原字符串按照UTF-8编码格式进行URL编码的结果。函数内部遍历了输入字符串的每一个字符,...

    Ajax 中文乱码问题

    下面是一个使用JavaScript编写的示例代码,演示如何实现这一功能: ```javascript function URLEncoding(vstrIn) { var strReturn = ""; for (var i = 1; i ; i++) { var ThisChr = vstrIn.charAt(i - 1); if ...

    ajax和java 做分页技术

    在Web开发中,分页技术是一项非常重要的功能,它能够帮助用户更有效地浏览大量数据,而无需一次性加载所有内容,从而提高用户体验。本篇将详细探讨如何使用Ajax和Java技术来实现分页,特别是在Struts、Hibernate和...

    LoadRunner中转换字符串到URL编码

    通过理解上述内容,你可以在LoadRunner的C语言脚本中实现字符串到URL编码的转换,无论是通过编写自定义函数,还是利用提供的`code.exe`工具,都能有效地完成任务。同时,记得时刻关注代码的可读性和维护性,以便在...

    AntiXssLibrary_HtmlSanitizationLibrary.zip

    为了有效地利用这两个库,开发者需要了解它们的功能限制,并结合业务需求制定合适的输入验证和清理策略。同时,时刻保持库的更新,以应对新出现的XSS攻击手段。最后,结合其他安全实践,如输入验证、输出编码、内容...

    ajax笔记01

    - 在 Tomcat 服务器配置文件 `server.xml` 中设置 `URLEncoding="utf-8"`。 - **URL 参数编码问题**: - 在发送请求前使用 `URLEncoder.encode()` 方法对 URL 参数进行编码。 - 确保前端页面的编码也是 UTF-8。 ...

    转换中文为unicode 转换unicode到正常文本

    代码如下:‘//转换中文为unicode function URLEncoding(vstrIn) dim i dim strReturn,ThisChr,innerCode,Hight8,Low8 strReturn = “” for i = 1 to Len(vstrIn) ThisChr = Mid(vStrIn,i,1) If Abs...

    IOS应用源码之【框架】Google Toolbox for Mac.rar

    开发者可以利用这个工具轻松地处理网络数据,同时其内置的错误处理和回调机制使得网络编程更加稳健。 其次,GTM提供了`GTMUnitTesting`,这是一个测试支持库,它扩展了Xcode自带的OCUnit测试框架,增加了如测试宏、...

    Ajax,JQuery达内培训笔记

    - 配置Tomcat的server.xml文件,设置`URLEncoding="utf-8"`。 - 使用JavaScript的`encodeURI`或`encodeURIComponent`函数对URL进行编码。 - 对于POST请求,可设置请求头`Content-Type`为`application/x-...

    ajax的处理中文乱码程序

    在进行Web开发时,我们经常需要使用Ajax技术实现异步加载数据的功能。当请求的数据包含中文字符时,尤其是在跨域请求不同编码标准的页面时,经常会遇到中文乱码的问题。本文主要探讨如何解决跨域读取其他网页时出现...

    关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法

    当使用AJAX(异步JavaScript和XML)进行跨编码通信时,由于XMLHttpRequest对象默认使用UTF-8处理数据,如果服务器返回的数据是GB2312编码,就会导致乱码。 解决这个问题的关键在于正确地解码接收到的数据。在...

    结果乱码的各种函数

    二进制数据转字符串:BytesToBstr 该函数负责将从网络请求获得的二进制数据转换成字符串。 #### 函数定义: ```vb Public Function BytesToBstr(strBody, CodeBase) ``` #### 实现原理: - 使用`Adodb.Stream`...

    详解XMLHTTP控件的应用

    以上代码中的`URLEncoding`函数实现了这一功能,确保了特殊字符能够被正确传输。 2. **创建XMLHTTP对象**: `CreateObject("Microsoft.XMLHTTP")`这行代码用于创建XMLHTTP对象,它是所有后续操作的基础。 3. **设置...

Global site tag (gtag.js) - Google Analytics