+ -
当前位置:首页 → 问答吧 → 关于java传递中文url出现乱码的问题,请教

关于java传递中文url出现乱码的问题,请教

时间:2013-05-15

来源:互联网

本帖最后由 萧哥 于 2013-5-15 16:35 编辑

<body>
<script language="javascript">
function testfunction(){
        window.open("http://www.XXX.com/search-"+testform.address.value+".html")
}
</script>
<form name="testform">
<input type="text" name="address" size="50" />
<input type="image" src="search.gif" onclick='testfunction()' />
</form></body>


点击搜索之后,到搜索页面,就会出现乱码。
本来我搜索的“我们”,结果变成“ 鎴戜滑”。
是js传递中文URL就会出现这个问题吗?我用的是GBK编码,请教这个问题怎么解决?

作者: 萧哥   发布时间: 2013-05-15

按钮调用函数应该是双引号,但是我用双引号论坛页面就显示不出来,暂时用单引号代替。

作者: 萧哥   发布时间: 2013-05-15

把字符串encodeurl编码一下

作者: bb73   发布时间: 2013-05-18

这是javascript,不是java...中文url最好urlencode一下

作者: qxhy123   发布时间: 2013-05-18

解决方法如下:
1、在JS里对中文参数进行两次转码
复制代码 代码如下:

var login_name = document.getElementById("loginname").value;
login_name = encodeURI(login_name);
login_name = encodeURI(login_name);

2、在服务器端对参数进行解码
复制代码 代码如下:

String loginName = ParamUtil.getString(request, "login_name");
loginName = java.net.URLDecoder.decode(loginName,"UTF-8");

作者: cslgpl   发布时间: 2013-05-21

我也出现过这种问题,我是用js跨域来提交中文的。
我的解决方法是:

下面这两个是网上找的js的urlencode函数方法:
function UnicodeChr(){
 return '';
}

function UnicodeToAnsi(chrCode) {
         var chrHex=chrCode.toString(16);
         chrHex="000"+chrHex.toUpperCase();
         chrHex=chrHex.substr(chrHex.length-4);
         var i=UnicodeChr().indexOf(chrHex);
         if(i!=-1) {
          chrHex=AnsicodeChr().substr(i,4);
         }
         return parseInt(chrHex,16);
}


function AnsiToUnicode(chrCode) 
{
         var chrHex=chrCode.toString(16);
         chrHex="000"+chrHex.toUpperCase();
         chrHex=chrHex.substr(chrHex.length-4);
         var i=AnsicodeChr().indexOf(chrHex);
         if(i!=-1) {
          chrHex=UnicodeChr().substr(i,4);
         }
         return parseInt(chrHex,16)
}

function str2asc(str)
{
    var n = UnicodeToAnsi(str.charCodeAt(0));
    var s = n.toString(16);
    return s.toUpperCase();
}

function asc2str(code)
{
    var n = AnsiToUnicode(code);
    return String.fromCharCode(n);
}

function UrlEncode(str)
{
   var ret="";
   var tt="";
   var strSpecial="!\"#$%&'()*+,/:;<=>?[]^`{|}~%";
   for(var i=0;i<str.length;i++){
    var chr = str.charAt(i);
     var c=str2asc(chr);
     tt += chr+":"+c+"n";
    if(parseInt("0x"+c) > 0x7f){
       ret+="%"+c.slice(0,2)+"%"+c.slice(-2);
     }else{
       if(chr==" ")
         ret+="+";
       else if(strSpecial.indexOf(chr)!=-1)
         ret+="%"+c.toString(16);
       else
         ret+=chr;
     }
   }
   return ret;
}

function UrlDecode(str){
   var ret="";
   for(var i=0;i<str.length;i++){
    var chr = str.charAt(i);
     if(chr == "+"){
                  ret+=" ";
     }else if(chr=="%"){
                  var asc = str.substring(i+1,i+3);
                  if(parseInt("0x"+asc)>0x7f){
                           ret+=asc2str(parseInt("0x"+asc+str.substring(i+4,i+6)));
                           i+=5;
                  }else{
                           ret+=asc2str(parseInt("0x"+asc));
                           i+=2;
                  }
     }else{
                  ret+= chr;
     }
   }
   return ret;
}


在php中还需要对接到的中文进行转码操作
function myUrldecodeUtf8($str)
{   
        $encode = mb_detect_encoding($str, array("ASCII","UTF-8","GB2312","GBK","BIG5"));
    $str = iconv($encode,'UTF-8',$str);
    return $str;
}
我这边将sql进入log文件是正常的,但一进数据库就乱码了,所以进行了一下转码。


希望对你有所帮助。

这个js函数UnicodeChr内容很多,不让发!

作者: 枫叶   发布时间: 2013-05-23