利用JavaScript通过URL方式向后台代码传值是一种经常用到的手段,但在传递汉字时经常会出现字符不全或变成乱码的问题,其原因是由于客 户端IE浏览器的编码方式为GB2312(简体中文版WINDOWS的默认设置),而后台的C#代码使用utf8编码(创建WEB工程的默认配置)。

网上有很多方案解决该问题,如将web.config的编码方式改为GB2312、在客户端通过escape先编码再传,个心体会都不是很理想或有些特殊 字符不支持。经过比较我决定使用encodeURIComponent在客户端进行编码,再传值,除了“/”不支持(但实际开发中很少需要传递该值,如果 真有此请况,再加一层判断即可。

encodeURIComponent的帮助文档如下:

encodeURIComponent 方法

将文本字符串编码为一个统一资源标识符 (URI) 的一个有效组件。

encodeURIComponent( encodedURIString )

必选的 encodedURIString 参数代表一个已编码的 URI 组件。

说明

encodeURIComponent 方法返回一个已编码的 URI。如果您将编码结果传递给 decodeURIComponent ,那么将返回初始的字符串。因为encodeURIComponent 方法对所有的字符编码,请注意,如果该字符串代表一个路径,例如 /folder1/folder2/default.html ,其中的斜杠也将被编码。这样一来,当该编码结果被作为请求发送到 web 服务器时将是无效的。如果字符串中包含不止一个 URI 组件,请使用 encodeURI 方法进行编码。

要求

版本 5.5

请参阅

decodeURI 方法 | decodeURIComponent 方法

应用于: Global 对象


我做了一个小例子来展现该效果

Default.aspx代码:

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    
<title>无标题页</title>
</head>
<script type="text/javascript" language="javascript">
    
function callURL(Value1, Value2)
    {
        document.URL 
= "Default.aspx?Value1=" + encodeURIComponent(Value1) + "&Value2=" + encodeURIComponent(Value2);
    }
</script>
<body>
    
<form id="form1" runat="server">
    
<div>
        Value1=
<input id="Text1" type="text" value="1234567890"/><br />
        Value2=
<input id="Text2" type="text" value="中华人民共和国"/>
        
<br />
        
<input id="Button1" type="button" value="提交" onclick="callURL(Text1.value, Text2.value)"/></div>
    
</form>
</body>
</html>

 

Default.aspx.cs代码:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page 
{
    
protected void Page_Load(object sender, EventArgs e)
    {
        
string tmpValue1 = "";
        
string tmpValue2 = "";
        
if (Request.QueryString["Value1"!= null)
        {
            tmpValue1 
= Request.QueryString["Value1"].ToString();
        }
        
if (Request.QueryString["Value2"!= null)
        {
            tmpValue2 
= Request.QueryString["Value2"].ToString();
        }
        Response.Write(
"Value1=" + tmpValue1 + "<br />" + "Value2="  + tmpValue2);
    }
}

 

Posted on 2006-12-20 05:38  Clark Zheng  阅读(1060)  评论(0编辑  收藏  举报