表单从gb2312的页面提交到utf-8页面,或者表单从utf-8的页面提交到gb2312页面的解决办法

·在不同编码的页面之间提交表单 ,可使用accept-charset属性,此属性FF支持,但是IE不支持
--------------------------------------------------------------------
1. 表单从gb2312的页面提交到utf-8页面时。即
   ·<form method="post" action="2.php" accept-charset="utf-8">
   ·accept-charset属性FF识别,但是ie不识别,因此采用
   ·<form method="post" action="2.php" accept-charset="utf-8" onsubmit="document.charset='utf-8';">

   ·当提交后,直接后退到表单提交页,form页面会编程乱码。,此时需要在gb2312页面中head结束之前添加
     <script>
         if(document.charset!="gb2312" && navigator.userAgent.indexOf("MSIE")>0){
            window.location.reload();
         }
    </script>
---------------------------------------------------------------------

2. 从 UTF8 编码页面 Post 数据到 GB2312 页面乱码问题解决方法
    问题描述:如包含中文,则接收的数据会发生乱码
    解决方法:
          FF中,支持accept-charset属性
            <form method="post" action="2.php" accept-charset="gb2312">
          IE中,采用js(小强)--gbk将中文编译,在utf-8中解
           ·gb2312文件--escape,js编码函数
      <script type="text/javascript">
                        function chkform(f)
                        {
                       f.uname.value=escape(f.uname.value);
                       return true;
                         }
                  </script>

     <form  onsubmit="return chkform(this);"  action="insert.asp" method="post" >
     ------------------------------------------------------------
          ·utf-8文件,接收.asp函数,解码escape
 Function vbsUnEscape(str)
    dim i,s,c
    s=""
    For i=1 to Len(str)
        c=Mid(str,i,1)
        If Mid(str,i,2)="%u" and i<=Len(str)-5 Then
            If IsNumeric("&H" & Mid(str,i+2,4)) Then
                s = s & CHRW(CInt("&H" & Mid(str,i+2,4)))
                i = i+5
            Else
                s = s & c
            End If
        ElseIf c="%" and i<=Len(str)-2 Then
            If IsNumeric("&H" & Mid(str,i+1,2)) Then
                s = s & CHRW(CInt("&H" & Mid(str,i+1,2)))
                i = i+2
            Else
                s = s & c
            End If
        Else
            s = s & c
        End If
    Next
    vbsUnEscape = s
End Function

uname=vbsUnEscape(uname)
 

posted on 2012-01-17 09:51  little jerry  阅读(2035)  评论(0编辑  收藏  举报

导航