utf-8編碼技巧 url編碼問題
更新時間:2007年01月05日 00:00:00 作者:
在用utf-8編碼的頁面中,通過ASP內(nèi)置對象Server.URLEncode()編碼后的URL不能正確的找到文件,解決方法是用JavaScript的escape()函數(shù)進行編碼
編碼比較程序
Asp版
JavaScript版
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]escape() 方法:
采用ISO Latin字符集對指定的字符串進行編碼。所有的空格符、標(biāo)點符號、特殊字符以及其他非ASCII字符都將被轉(zhuǎn)化成%xx格式的字符編碼(xx等于該字符在字符集表里面的編碼的16進制數(shù)字)。比如,空格符對應(yīng)的編碼是%20。
不會被此方法編碼的字符: @ * / +
encodeURI() 方法:
把URI字符串采用UTF-8編碼格式轉(zhuǎn)化成escape格式的字符串。
不會被此方法編碼的字符:! @ # $& * ( ) = : / ; ? + '
encodeURIComponent() 方法:
把URI字符串采用UTF-8編碼格式轉(zhuǎn)化成escape格式的字符串。與encodeURI()相比,這個方法將對更多的字符進行編碼,比如 / 等字符。所以如果字符串里面包含了URI的幾個部分的話,不能用這個方法來進行編碼,否則 / 字符被編碼之后URL將顯示錯誤。
不會被此方法編碼的字符:! * ( ) '
因此,對于中文字符串來說,如果不希望把字符串編碼格式轉(zhuǎn)化成UTF-8格式的(比如原頁面和目標(biāo)頁面的charset是一致的時候),只需要使用escape。如果你的頁面是GB2312或者其他的編碼,而接受參數(shù)的頁面是UTF-8編碼的,就要采用encodeURI或者encodeURIComponent。
另外,encodeURI/encodeURIComponent是在javascript1.5之后引進的,escape則在javascript1.0版本就有。
編碼比較程序
Asp版
復(fù)制代碼 代碼如下:
<%@LANGUAGE="JAVASCRIPT" CODEPAGE="65001"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>無標(biāo)題文檔</title>
</head>
<body>
<%
Response.Write("server對象輸出<br />");
Response.Write(Server.URLEncode("ether.エーテル.gif"));
Response.Write("<br />");
Response.Write("JavaScript函數(shù)encodeurl輸出<br />");
Response.Write(encodeURI("ether.エーテル.gif"));
Response.Write("<br />");
Response.Write("JavaScript函數(shù)escape輸出<br />");
Response.Write(escape("ether.エーテル.gif"));
%>
</body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>無標(biāo)題文檔</title>
</head>
<body>
<%
Response.Write("server對象輸出<br />");
Response.Write(Server.URLEncode("ether.エーテル.gif"));
Response.Write("<br />");
Response.Write("JavaScript函數(shù)encodeurl輸出<br />");
Response.Write(encodeURI("ether.エーテル.gif"));
Response.Write("<br />");
Response.Write("JavaScript函數(shù)escape輸出<br />");
Response.Write(escape("ether.エーテル.gif"));
%>
</body>
</html>
JavaScript版
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
采用ISO Latin字符集對指定的字符串進行編碼。所有的空格符、標(biāo)點符號、特殊字符以及其他非ASCII字符都將被轉(zhuǎn)化成%xx格式的字符編碼(xx等于該字符在字符集表里面的編碼的16進制數(shù)字)。比如,空格符對應(yīng)的編碼是%20。
不會被此方法編碼的字符: @ * / +
encodeURI() 方法:
把URI字符串采用UTF-8編碼格式轉(zhuǎn)化成escape格式的字符串。
不會被此方法編碼的字符:! @ # $& * ( ) = : / ; ? + '
encodeURIComponent() 方法:
把URI字符串采用UTF-8編碼格式轉(zhuǎn)化成escape格式的字符串。與encodeURI()相比,這個方法將對更多的字符進行編碼,比如 / 等字符。所以如果字符串里面包含了URI的幾個部分的話,不能用這個方法來進行編碼,否則 / 字符被編碼之后URL將顯示錯誤。
不會被此方法編碼的字符:! * ( ) '
因此,對于中文字符串來說,如果不希望把字符串編碼格式轉(zhuǎn)化成UTF-8格式的(比如原頁面和目標(biāo)頁面的charset是一致的時候),只需要使用escape。如果你的頁面是GB2312或者其他的編碼,而接受參數(shù)的頁面是UTF-8編碼的,就要采用encodeURI或者encodeURIComponent。
另外,encodeURI/encodeURIComponent是在javascript1.5之后引進的,escape則在javascript1.0版本就有。
相關(guān)文章
不需要視頻服務(wù)器,同樣可以在線播放,F(xiàn)LV制作方法
不需要視頻服務(wù)器,同樣可以在線播放,F(xiàn)LV制作方法...2007-01-01UTF-8、Unicode 標(biāo)準(zhǔn)化表單、BOM
UTF-8、Unicode 標(biāo)準(zhǔn)化表單、BOM...2007-01-01