有一段代碼,很簡單的: code.asp: PHP: <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <!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> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>测试</title> </head> <body> <% Dim c : c = "" c = Request.QueryString("c") Response.Write(c & "?") %> </body> </html> 因為是本地測試,所以請求下面的地址: http://localhost/code.asp?c=測試 結果只顯示“?”。 如果改為如下代碼: PHP: <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <!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> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>测试</title> </head> <body> <% Dim c : c = "" c = Request.QueryString("c") Response.Write(c & "?") %> <a href="?c=測試">Link</a> </body> </html> 點 Link 鏈接,地址也為: http://localhost/code.asp?c=測試 但是就可以顯示“測試?” 為什么這樣呢?
以上現象出現在 IE6 中。 在 IE7 中表現為,直接輸入那個地址,有可能出現亂碼,也可能只顯示“?”,如果通過 Link 訪問,正常; 在 FF 中,和預期的一樣。 -------- 如果 c 的內容為英文或者數字,一切正常。
代码: <a href="?c=<%=server.URLEncode("没有小JJ")%>">Link</a> 传出中文参数需用server.URLEncode编码 FF好像不用 把文件另存一下 编码选择utf-8 就OK了
HTML: <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <!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> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>测试</title> </head> <body> <% Dim c : c = "" c = Request.QueryString("c") Response.Write(c & "?") %> <a href="?c=<%=server.URLEncode("没有小JJ")%>">Link</a> </body> </html> 不会吧,另存为utf-8 屡试不爽
之前遇到一次是没有定义 CodePage 导致,但是这次定义了 CodePage,文件以 UTF-8 编码保存,输出字符集也采用了 utf-8,无效。 FF 下很正常,就是个死 IE 。头痛。 另外,如果出现在链接中,编码不编码都没有太大的关系,问题出现在跳转的请求或者 Ajax 的方式中。 直接请求地址,传递参数之前,将参数编码就可以了。