修改:2008-10-20
public static string Escape(string s)
{
StringBuilder sb = new StringBuilder();
byte[] ba = System.Text.Encoding.Unicode.GetBytes(s);
for (int i = 0; i < ba.Length; i += 2)
{
if (ba[i + 1] == 0)
{
//數字,大小寫字母,以及"+-*/._"不變
if (
(ba[i]>=48 && ba[i]<=57)
||(ba[i]>=64 && ba[i]<=90)
||(ba[i]>=97 && ba[i]<=122)
||(ba[i]==42 || ba[i]==43 || ba[i]==45 || ba[i]==46 || ba[i]==47 || ba[i]==95)
)//保持不變
{
sb.Append(Encoding.Unicode.GetString(ba, i, 2));
}
else//%xx形式
{
sb.Append("%");
sb.Append(ba[i].ToString("X2"));
}
}
else
{
sb.Append("%u");
sb.Append(ba[i + 1].ToString("X2"));
sb.Append(ba[i].ToString("X2"));
}
}
return sb.ToString();
}
源文地址javascript : escape 編碼與C# 的使用問題. onsubmit="form1.Text1.value = escape(form1.Text1.value);"
.cs處理
string a = HttpUtility.UrlDecode(Text1.Value);
Response.Write(a);
//c#實現escape編碼:(用在ajax中)然後在aspx用unescape解碼,就不會出現亂碼問題
private string escape(string s)
{
StringBuilder sb = new StringBuilder();
byte[] ba = System.Text.Encoding.Unicode.GetBytes(s);
for (int i = 0; i < ba.Length; i += 2)
{
sb.Append("%u");
sb.Append(ba[i + 1].ToString("X2"));
sb.Append(ba[i].ToString("X2"));
}
return sb.ToString();
}
另外一些方法----------------------------encodeURIComponent() / decodeURIComponent()encodeURI()/decodeURI()注意上面兩對javascript函數使用的編碼多是utf-8應次如果頁面使用編碼不是utf-8就需要做另外的處理 asp.net 發資料給 javascript 在頁面使用gb2312時encodeString=HttpUtility.UrlEncode("中問是中問http://www.gyzs.net/", System.Text.Encoding.UTF8) 接收<script>document.write(decodeURIComponent('<%=encodeString %>'));</script> javascritp 發資料給asp.net頁面中有如下js指令碼<script>document.write("<a href='?t=" +encodeURI('中問是中問http://www.gyzs.net') +"' >點我</a>");</script>如果web.config中配置使用gb2312那麼就要做如下處理 Response.Write(HttpUtility.UrlDecode( Server.UrlEncode( Request["t"]),System.Text.Encoding.UTF8));如果web.config中使用的utf-8那麼直接使用Request["t"]就可以 另外要注意表單提交使用post方法時,會對錶單裡的資料進行 url編碼,注意不要重複