5

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

有任何想法吗?

谢谢你给这个的任何时候。它一直让我发疯。-m

4

4 回答 4

12

根本问题是 Response.Codepage 对表单帖子的影响。

当您将表单发送到指定内容编码为 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 设置为与发送者编码匹配的代码页,并且这不会自动发生。

于 2008-12-09T11:02:57.230 回答
2

我猜您使用的编辑器不适用于 UTF-8,并且正在将所有内容转换为 ASCII。

简单的答案是停止在 HTML 页面中使用特殊字符。版权符号应写为&copy;&#169;

于 2008-12-08T18:45:51.727 回答
1

根据我对这个确切问题的经验,我发现这些字符弹出了很多,因为 1)用户在输入内容(即西班牙语)时使用的是非英语字符集(和键盘),以及 2)内容不是转换为 UTF-8。你在正确的轨道上,检查标题中的内容类型,但如果这种情况继续发生,你真的必须通过转换器运行内容。许多年前,这个问题给我带来了数小时的痛苦,经典 ASP (我希望我仍然可以访问代码以提供进一步的帮助)。

于 2008-12-08T18:48:32.000 回答
0

® 是 ® 存储为 UTF-8 时的样子,但显示为 ASCII/ISO-8859-1/Windows-1252。使用meta标记不足以确保您的页面以 UTF-8 格式提供。您还需要在 Content-Type HTTP 标头中设置编码。此标头通常使用某些服务器范围的设置或以编程方式设置。

我不知道 ASP,但这似乎是你应该如何设置该标题:

HtmlEncode UTF-8

这可能会提供更多信息:

http://technet.microsoft.com/en-us/library/bb742422.aspx#EBAA

如果您的数据存储在数据库中,您还需要确保数据也以 UTF-8 格式存储,或者在存储和检索数据时进行转换。

于 2008-12-08T22:24:52.470 回答