字符编码问题 - UTF8 / iso-8859-1

时间:2014-01-01 09:16:10

标签: encoding utf-8 asp-classic

新年快乐!

我在我的网站上使用经典ASP(jimpix.co.uk)。我在12月初更新了它以使用Bootstrap Framework,它在HEAD元素中使用了它:

<meta charset="utf-8">

我将所有用户输入的内容通过“Server.HTMLencode”

我的理解是,这是消除跨站点脚本编写风险所必需的。

我做了一些基本测试,发现了这个:

  1. 编码为UTF-8
  2. 将表单数据放入“Server.HTMLencode”
  3. é,è,à,ç呈现为Ã,,Ã,,Ã,ç
  4. 查看来源将字符显示为:

    &#195;&#169;, &#195;&#168;, &#195;&#160;, &#195;&#167;
    
    1. 编码是charset = iso-8859-1
    2. 将表单数据放入“Server.HTMLencode”
    3. é,è,à,ç仍然呈现为é,è,à,ç
    4. 查看来源将字符显示为:

      &#233;, &#232;, &#224;, &#231;
      

      问题似乎是我不能在编码为UTF-8的页面上使用“Server.HTMLencode”,而没有Server.HTMLencode使用法语/德语/俄语/希伯来语等。

      我尝试将其添加到测试页面的顶部:

      Response.CodePage = 1252
      Response.LCID = 1060
      Response.Charset = "utf-8"
      

      但它没有任何区别。

      我的测试页面非常简单 - 没有数据库等的链接,因此可以规定数据库上的字符编码等问题:

      <%
      frm = Server.HTMLencode(request("body"))
      %>
      <!DOCTYPE html>
      <html lang="en">
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
          </head>
          <body>
          <form action="test0001.asp" method="post">
              <p><textarea name="body" style="width:400px; height:200px;"><%=frm%></textarea></p>
              <p><input type="submit"></p>
          </form>
          </body>
      </html>
      

      我把编码放回:

      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
      

      暂时在我的直播网站上,我尝试解决这个问题。

      非常感谢任何建议,

      谢谢!

1 个答案:

答案 0 :(得分:0)

您提供的代码中出现错误的一件事是,对于utf-8,您应该使用

Response.CodePage = 65001

1252适用于Windows-1252,(几乎)与iso-8859-1相同

此外,如果您的页面包含任何硬编码的非西文字符,则需要使用utf-8编码保存页面。你可以用记事本做到这一点。从文件菜单中选择另存为,您将在对话框中看到该选项。

我推荐这个页面,它提供了更多细节

http://www.hanselman.com/blog/InternationalizationAndClassicASP.aspx