none
UTF-8页面 到百度的gbk页面产生的一个编码问题 RRS feed

  • 问题

  • <asp:TextBox ID="tbBai" runat="server"></asp:TextBox>
      <a id="baidu" onclick="Up()"><img alt="dd" src="http://img.baidu.com/img/img-jg.gif" />
      </a>
    <script type="text/javascript">
            function Up()
            {
            var Name=document.getElementById("<%=tbBai.ClientID  %>").value;
            var na=encodeURI(Name);
            document.getElementById("baidu").href="http://image.baidu.com/i?ct=201326592&cl=2&lm=-1&tn=baiduimage&pv=&z=0&s=0&word="+na;
            
            }
        </script>
    中文传过去是乱码?
    2010年9月19日 9:42

答案

全部回复

  • baidu用是Gb2312编码,不是utf-8
    【孟子E章】
    2010年9月20日 1:14
    版主
  • 所以我想转换一下。  asp.net又不是gb2312。

    请问孟大哥这要怎么解决啊

    2010年9月20日 1:16
  • 你需要写一段将中文转换的代码,或者调用服务器端的HttpUtility.UrlEncode方法进行编码
    【孟子E章】
    2010年9月20日 1:33
    版主
  • 我在后台写了一个
     //编码转换
            public string Endcode()
            {
                string a = HttpUtility.UrlEncode(tbBai.Text, System.Text.Encoding.GetEncoding("GB2312"));
                return a;

            }

    前台

     <script type="text/javascript">
            function Up()
            {
            var Name=document.getElementById("<%=tbBai.ClientID  %>").value;
            var na=encodeURI(Name);
            var end="<%=Endcode()%>";
    //        alert(end);
            var hre="http://image.baidu.com/i?ct=201326592&cl=2&lm=-1&tn=baiduimage&pv=&z=0&s=0&word="+end;
            
            document.getElementById("baidu").href=hre;
             
            }
        </script>

          <asp:TextBox ID="tbBai" runat="server"> </asp:TextBox>
         <a id="baidu"  onclick="Up()">   <img alt="dd" src="image/img-jg.gif"  />
            </a>

    但是end得不到值是什么原因啊。

    2010年9月20日 2:44
  • 你得不到值的原因是:在你页面加载时Endcode()方法得到tbBai值是空的

    后面通过执行JS的UP方法都得到的是空值

    建议你可以这样做 你可以用个ImageButton来执行OnClick事件,OnClick事件里调用Endcode()方法,后跳转到百度里.

    希望对你有帮助!

    • 已编辑 强少 2010年9月21日 8:46
    2010年9月20日 7:17
  • 请问可以在脚本里调用后台的LinkButton的单击事件吗?
    2010年9月20日 8:31
  • 可以的

    例如:

     

    html页:

    <script type="text/javascript">
          

     function Up()

    {
           document.getElementById("<%=tbBai.ClientID  %>").click();

    }

    </script>

     <asp:Button ID="tbBai" runat="server" Text="好" onclick="tbBai_Click"  Visable="false"> </asp:Button>


         <a id="baidu"  onclick="Up()">   <img alt="dd" src="image/img-jg.gif"  />
            </a>

     

    后台

    protected void tbBai_Click(object sender, EventArgs e)
        {
            Response.Write("a");
        }

    希望对你有帮助

    2010年9月20日 9:10
  • <script type="text/javascript">

     function Up()

    {
           document.getElementById("<%=tbBai.ClientID  %>").click();

            var ends="<%=Endcode()%>";
            var hre="http://image.baidu.com/i?ct=201326592&cl=2&lm=-1&tn=baiduimage&pv=&z=0&s=0&word="+ends;       
            document.getElementById("baidu").href=hre;

    }

    </script>

    谢谢,  还有个问题,  var ends="<%=Endcode()%>";还是空

    2010年9月20日 9:54
  • 是空,Endcode()只会在页面第一次加载时执行,那时得到的值是为空

    Endcode()这个方法你要放到后台click()事件里去执行,就可以得到当前tbbai里面的值。


    发现问题,解决问题!
    2010年9月21日 1:16
  • 后台
     public string Endcode()
        {
          
          string a = HttpUtility.UrlEncode(tbBai.Text, System.Text.Encoding.GetEncoding("GB2312"));
          return a;
        }
     protected void Button1_Click(object sender, EventArgs e)
        {
           Endcode();
        }
    
    前台
     function Up()   
        {     
         document.getElementById("<%=tbaidu.ClientID %>").click();
          var ends="<%= Endcode() %>";
          if(ends=="")
          {
            return ;
    
          }else
          {
          var hre="http://image.baidu.com/i?ct=201326592&cl=2&lm=-1&tn=baiduimage&pv=&z=0&s=0&word="+ends;    
          document.getElementById("baidu").href=hre;
          }
        }   
    我要点击两次,才跳到百度页面.

     <asp:TextBox ID="tbBai" runat="server">
            </asp:TextBox>
            <a id="baidu"  onclick="Up()"><img alt="dd" src="image/img-jg.gif"  /></a>
            <asp:Button ID="tbaidu" runat="server" Text="Button" onclick="Button1_Click" />
    2010年9月21日 1:22
  • 当然是点击两次

    第一次点击时Endcode()还是为空的,

    第二次点击时JS里ends才接受到了第一次执行结果的值,才会执行跳转

    你为什么不在后台里直接进行跳转?

     protected void Button1_Click(object sender, EventArgs e)
        {
          string ends = Endcode().ToString();

    Response.Redirect("http://image.baidu.com/i?ct=201326592&cl=2&lm=-1&tn=baiduimage&pv=&z=0&s=0&word=" + ends + "");
        }

     

     

     


    发现问题,解决问题!
    • 已标记为答案 张凯 2010年9月21日 1:44
    2010年9月21日 1:34
  • 谢谢,  经验少了。学点经验啊
    2010年9月21日 1:44