asp-classic - 经典的 ASP gremlims,在使用 HTML 特殊字符时将 Â 插入到文本中

标签 asp-classic utf-8

我正在处理一个较旧的经典 ASP 站点,并且有一个表单允许用户输入一些文本(进入多行文本框),如果他们添加一个 html 字符,如 ®(注册商标),它会正确插入它。但是当他们去编辑数据时,使用相同的表格,更新会在注册商标前添加一个随机的'Â'(圆角音符)。内容类型为 utf-8。

有任何想法吗?

感谢您随时提供此信息。它一直让我发疯。
-m

最佳答案

根本问题是 Response.Codepage 对 Form Posts 的影响。

当您将表单发送到指定内容编码为 UTF-8 的客户端时,浏览器将假定表单帖子的内容应以 UTF-8 编码发送。

现在,接收帖子的操作页面将(有点违反直觉)使用 的值。 Response.Codepage 通知它帖子中的字符是如何编码的。这并不明显,因为我们倾向于认为发送者的工作是定义其发送内容的编码。此外,认为与我们想要在响应中发送的内容的编码有关的属性与如何接收初始请求有关,这也不是自然而然的飞跃。在这种情况下确实如此。

发生的事情是您的表单发布了字符的 UTF-8 编码版本,但接收的页面没有将其 Response.Codepage 设置为 65001(UTF-8 代码页)。它可能设置为系统 OEM 代码页,如 1252。因此,字符的 UTF-8 编码被解释为两个单独的字符。

我对 ASP 中良好字符处理的建议是:-

  • 将所有页面另存为 UTF-8
  • 在所有页面的顶部包含 <%@ codepage=65001
  • 在所有页面的顶部包含 <% Response.CharSet = "UTF-8"%>
  • 将发布的数据存储在 unicode 字段类型中,例如 SQL Servers NVARCHAR 类型。

  • 这里重要的是,在您读取 ASP 页中的表单值之前,您需要确保将 Response.Codepage 设置为与发件人编码匹配的代码页,并且这不会自动发生。

    关于asp-classic - 经典的 ASP gremlims,在使用 HTML 特殊字符时将 Â 插入到文本中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/350429/

    相关文章:

    python - Python 中的 UTF-8

    c++ - 如何在 C++ 中大写/小写 UTF-8 字符?

    tsql - "Cannot change the ActiveConnection property of a Recordset object which has a Command object as its source"错误是什么意思?

    mysql - 经典 ASP 遗留系统对 MySQL 8.0 中的所有整数返回 0

    vbscript - ADODB.Parameters 错误 '800a0e7c' 参数对象定义不正确。提供的信息不一致或不完整

    php - 如何放入JSON对象非英文字母?

    c# - ASP.NET MVC (C#) 中的经典 ASP

    javascript - 如何使用查询字符串 ASP 获取 #

    R、Windows 和外语字符

    vim - vim 或其他地方文件编码和编码的基本原理