url中国語パス文字化け

5448 ワード

質問:フロントはurlで中国語を伝え、バックグラウンドはrequestを使う.getParameterはパラメータを受信します.firfox、chromeなどで問題ありません.ieを使うとパラメトリック文字化現象が発生します.
IE、Firefox、Operaの3種類のブラウザによるURLの転送の処理はそれぞれ異なり、ブラウザはURlを転送する際にURLを符号化しなければならず、
IEのデフォルトはUTF-8で伝送され、OperaもUTF-8で符号化されている可能性があり、Firefoxはテストを経てUTF-8で符号化されていないに違いない.ISO-8859-1で符号化されている可能性がある.したがって、中国語を処理しなければ、中国語文字は各ブラウザを介して独自の符号化方式でサーバに伝送された後、様々な符号化方式が現れ、サーバは受信したURLを1つの符号化方式で復号するしかない.これにより,サーバが使用する符号化方式と同様のブラウザでは中国語付きURlを使用しても問題なく,他のブラウザでは問題が発生する.
 
そこで解決策として、URLを転送する前にその中の中国語を符号化し、使用する符号化はサーバと同様の符号化である、サーバが使用する符号化がUTF-8であると仮定すると、符号化文は以下の通りである:URLEncoder.encode(「中国語」,「UTF-8」)です.これにより、中国語を符号化した後、すべてのブラウザはデフォルトの符号化方式で中国語を符号化しません.ブラウザが見たのは中国語ではなく、符号化されたバイトコードだからです.これにより,ブラウザがURLを転送する際の符号化の相違性の問題が回避される.
中国語のパラメータ問題の解決方法は上と同じです.しかし、ここで指す中国語のパラメータは?name=「中国語パラメータ」方式でURLに添付した後、get方式でサーバに転送するこの形式は、フォーム形式でサーバにコミットされるものではありません.各ブラウザの中国語パラメータに対する処理方式とそれぞれURL中の中国語に対する処理方式は異なり,各ブラウザ間でも差があり,伝送前に符号化しないものもあれば,伝送前に符号化したものもあり,状況は非常に複雑である.
しかし、私たちは変わらず変化し、
URLEncoderを使っていますEncode(「中国語」,「UTF-8」)は中国語パラメータを符号化し,各ブラウザがどのように中国語パラメータを処理しても,このとき我々が符号化した中国語はブラウザにとってバイトコードであり,a,b,cなどのアルファベットと何の違いもない.ただし、サーバはUTF-8符号化形式で中国語パラメータを復元します.
また、バックグラウンドでトランスコードを行います.
クリックすると新しいページが開き、ユーザーがログインします!ユーザー名が中国語の場合、火狐、googleブラウザは問題ないが、IEに文字化けの問題がある.
質問コード:
Htmlコード
<a href="member!sysLogin.do?name='${member.uname }'" target="_blank" /> </a>  

ハイパーリンク形式の伝参は、Get方式です!
Javaコード
public String sysLogin(){  
    try{  
        name=new String(name.getBytes("iso-8859-1"),"utf-8");  
        int r  = this.memberManager.loginbysys(name);  
        if(r==1){  
            return "syslogin";  
        }  
        this.msgs.add(" ");  
          
    }catch(RuntimeException e){  
        this.msgs.add(e.getMessage());            
    } catch (UnsupportedEncodingException e) {  
        this.msgs.add(e.getMessage());            
    }  
    return this.MESSAGE;  
}  

修正に成功しました:
Htmlコード
<a href="javascript:toSysLogin('${member.uname }');"  /> </a>  
  
function toSysLogin(name){  
    var uriname="member!sysLogin.do?name="+name;  
    window.open( encodeURI(uriname));  
}  

Javaコード

  public String sysLogin(String name){  
        try{  
          name =java.net.URLDecoder.decode(name, "UTF-8");//    
            name=new String(name.getBytes("iso-8859-1"),"utf-8");  
          int r  = this.memberManager.loginbysys(name);  
            if(r==1){  
                return "syslogin";  
            }  
            this.msgs.add(" ");  
              
        }catch(RuntimeException e){  
            this.msgs.add(e.getMessage());            
        } catch (UnsupportedEncodingException e) {  
            this.msgs.add(e.getMessage());            
        }  
        return this.MESSAGE;  
    }  

問題解決!
encode符号化
decodeデコード
ここには全部あります.の
JAVAにおけるURLリンク中国語パラメータ文字化けしのいくつかの処理方法は、以下のように整理収録されている.
方法1:
http://xxx.do?ptname=「私は中国人です」
String strPtname = request.getParameter("ptname");
strPtname = new String(strPtname.getBytes("ISO-8859-1"), "UTF-8");  
方法2:
<%@ page contentType="text/html;charset=gb2312"%>
">ここをクリック
<%
//request.setCharacterEncoding("GBK");
if(request.getParameter("url")!=null)
{
str=request.getParameter("url");
str=java.net.URLDecoder.decode(str,"GB2312");
str=new String(str.getBytes("ISO-8859-1"));
out.print(str);
}
%>
==================================
public String chinatoString(String str)
     {
      String s=str;
      try
      {
       byte tempB[]=s.getBytes("ISO-8859-1");
       s=new String(tempB);
       return s;
      }
      catch(Exception e)
      {
       return s;
      }
    }
====================================================
function URLencode(sStr)
    {
      return escape(sStr).
               replace(/\+/g, '%2B').
                  replace(/\"/g,'%22').
                     replace(/\'/g, '%27').
                       replace(/\//g,'%2F');
    }
方法3:
jstlを使うなら、自分でelのfunctionを書いてURLEncoderを呼び出すことができます.encodeで符号化します.
IEデフォルトではURLの後ろのパラメータは符号化せずに送信されますが、tomatデフォルトではISO 8859-1でURL復号が行われるため、上記のエラーが発生します.良い方法は次のとおりです.
1、URLパラメータにUTF-8で符号化されていることを確認し、方法はjs関数encodeURI()またはカスタムel functionを呼び出すことができる.
2、serverを設定する.xmlのConnectorはURIEncoding="UTF-8"を熟知しており、復号フォーマットと符号化フォーマットが統一されていることを確認します.
方法4:

for(var i=0;idocument.links[i].href=encodeURI(document.links[i].href);
}

アクションでString s=request.getParameter("s");
s=new String(s.getBytes("iso-8859-1"),"gbk");