1. 论坛系统升级为Xenforo,欢迎大家测试!
    排除公告

崩潰中,ASP 請教大家

本帖由 Ulysses2008-04-02 发布。版面名称:后端开发

  1. Ulysses

    Ulysses New Member

    注册:
    2006-02-05
    帖子:
    10,018
    赞:
    16
    有一段代碼,很簡單的:

    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 ""
    Request.QueryString("c")

    Response.Write("?")
    %>
    </
    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 ""
    Request.QueryString("c")

    Response.Write("?")
    %>
    <
    a href="?c=測試">Link</a>
    </
    body>
    </
    html>
    點 Link 鏈接,地址也為:

    http://localhost/code.asp?c=測試

    但是就可以顯示“測試?”

    為什么這樣呢?
     
  2. Ulysses

    Ulysses New Member

    注册:
    2006-02-05
    帖子:
    10,018
    赞:
    16
    以上現象出現在 IE6 中。

    在 IE7 中表現為,直接輸入那個地址,有可能出現亂碼,也可能只顯示“?”,如果通過 Link 訪問,正常;

    在 FF 中,和預期的一樣。

    --------

    如果 c 的內容為英文或者數字,一切正常。
     
  3. Kevin

    Kevin New Member

    注册:
    2005-10-23
    帖子:
    12,728
    赞:
    55
    不懂的路过~
     
  4. 老林

    老林 New Member

    注册:
    2005-09-06
    帖子:
    10,580
    赞:
    36
    代码:
    
    <a href="?c=<%=server.URLEncode("没有小JJ")%>">Link</a> 
    
    

    传出中文参数需用server.URLEncode编码 FF好像不用
    把文件另存一下 编码选择utf-8 就OK了
     
  5. swsw007

    swsw007 New Member

    注册:
    2006-07-04
    帖子:
    2,228
    赞:
    1
    听楼上上的,不懂得,路过一下。
     
  6. Ulysses

    Ulysses New Member

    注册:
    2006-02-05
    帖子:
    10,018
    赞:
    16
    另存选择编码的方法不行。

    解决办法其实很简单,传递含有参数的地址的时候,把参数编码即可。
     
  7. 老林

    老林 New Member

    注册:
    2005-09-06
    帖子:
    10,580
    赞:
    36
    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 屡试不爽
     
  8. tension

    tension New Member

    注册:
    2007-07-14
    帖子:
    1,314
    赞:
    0
    貌似是ASP,很多年没动过了
     
  9. 风狼

    风狼 New Member

    注册:
    2005-10-01
    帖子:
    7,452
    赞:
    25
    应该只是页面编码问题。UTF8对中文地址支持不行。。
     
  10. Ulysses

    Ulysses New Member

    注册:
    2006-02-05
    帖子:
    10,018
    赞:
    16
    之前遇到一次是没有定义 CodePage 导致,但是这次定义了 CodePage,文件以 UTF-8 编码保存,输出字符集也采用了 utf-8,无效。

    FF 下很正常,就是个死 IE 。头痛。

    另外,如果出现在链接中,编码不编码都没有太大的关系,问题出现在跳转的请求或者 Ajax 的方式中。

    直接请求地址,传递参数之前,将参数编码就可以了。