flylyke的专栏

任何一个傻瓜都能写出计算机可以理解的代码,惟有写出人类容易理解的代码,才是优秀的程序员

原创 用jscript对表单数据进行utf-8编码(无奈之下的做法)收藏

新一篇: Lucene中DateField的Date限制 | 旧一篇: 按指定编码方式读取文件和输出文件

如果需要转载,请注明出处和作者。谢谢
QQ:221704
MSN:flyly@yeah.net
EMAIL:zhangfl@sports.cn


代码:
<sccript>
for(i=0;i<_input.length;i++){
   if(_input[i].type=="text"){
    _input[i].value=encodeURI(_input[i].value);
   }
  }
  for(i=0;i<_text.length;i++){
   _text[i].value=encodeURI(_text[i].value);
  }
  uploadForm.action="uploadAction.do";
                //uploadForm.action="testupload.jsp";
  uploadBegin();
  uploadForm.submit();
</script>
这里先对表单里的数据进行编码.encodeURL这个方法转出来的编码是UTF-8的.

然后在后台的上传程序里在对他进行解码
if (item.isFormField()) {
          field.add(URLDecoder.decode(item.getString(),"UTF-8"));
 }

问我为什么要这么做?说起来偶也非常的郁闷.在一个上传的程序中.表单里提交的field数据在后台接收的时候全都变成了乱码(???).滤镜和用new String的方式进行转码我都试过了.(其他的表单提交程序不会出现乱码问题.我的页面到数据库都是GB2312的编码,包括滤镜).
我觉得有两种可能会出现这种情况:一是weblogic自己对我提交的数据不知道做了什么编码,还有一种可能就是fileupload这个jar包内部对requst的数据进行了编码.但乱码问题只是出现在liunx的平台上.

无奈之下我只好在提交前对数据进行utf-8编码.没想到乱码问题竟然解决了.但我还是不知道什么原因会导致这种情况.而java无法在提交前对数据进行编码,特别是在field个数不确定的情况.只好用jscript提供的函数进行编码了.上面的程序不是最理想的.因为在提交的那一时间里用户会看到field的数据都变成了utf-8.可能会让用户感觉到不是很友好.解决的方法是用hidden框去提交数据.

发表于 @ 2004年12月20日 10:36:00|评论(loading...)|编辑

新一篇: Lucene中DateField的Date限制 | 旧一篇: 按指定编码方式读取文件和输出文件

评论

#xujh 发表于2004-12-20 16:46:00  IP: 211.148.195.*
[JavaScript]一段把客户端的中文字串转换成UTF-8的代码
开发ASP.NET,我经常要在客户端的javascript代码中使用window.location='WebForm1.aspx?Param1=中文字串'来跳转页面,但在跳转之前必须要把中文字串转换成UTF-8的代码,否则如果中文字串中间存在空格之类的字符就会引起问题。

实际上IE 5.5+,Netscape 6+,Mozilla中已经有了转换函数,即encodeURIComponent,但对于低版本的浏览器则需要一下代码。
/* ***************************
** Most of this code was kindly
** provided to me by
** Andrew Clover (and at doxdesk dot com)
** http://and.doxdesk.com/ ;
** in response to my plea in my blog at
** http://worldtimzone.com/blog/date/2002/09/24
** It was unclear whether he created it.
*/
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
#flylyke 发表于2004-12-21 00:18:00  IP: 61.51.114.*
其实web容器会自己编码,默认情况tomcat和resin,weblogic内部都是用iso编码的.
正常情况下用了滤镜的话并且页面编码和数据库编码都一直偶是不用考虑编码问题.而且我觉得把编码放到前台来做只是一种折中的方法.治标不治本啊.
#八进制 发表于2004-12-22 11:45:00  IP: 202.108.130.*
最好是能不在代码里做任何转码处理,因为那样很容易在换平台或服务器的时候重新出现乱码。
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © zhangfl