【发布时间】:2009-06-04 00:43:24
【问题描述】:
我正在开发一个较旧的经典 ASP 站点,并且有一个表单允许用户输入一些文本(进入多行文本框),如果他们添加像 ®(注册商标)这样的 html 字符,它会正确插入它.但是当他们去编辑数据时,使用相同的表格,更新会在注册商标前添加一个随机的“”(抑扬符)。内容类型为 utf-8。
有什么想法吗?
感谢您随时提供此信息。它一直让我发疯。 -m
【问题讨论】:
标签: asp-classic utf-8
我正在开发一个较旧的经典 ASP 站点,并且有一个表单允许用户输入一些文本(进入多行文本框),如果他们添加像 ®(注册商标)这样的 html 字符,它会正确插入它.但是当他们去编辑数据时,使用相同的表格,更新会在注册商标前添加一个随机的“”(抑扬符)。内容类型为 utf-8。
有什么想法吗?
感谢您随时提供此信息。它一直让我发疯。 -m
【问题讨论】:
标签: asp-classic utf-8
根本问题是 Response.Codepage 对表单帖子的影响。
当您向客户端发送表单并指定内容编码为 UTF-8 时,浏览器将假定表单帖子的内容应以 UTF-8 编码发送。
现在接收帖子的操作页面将(有点违反直觉)使用 Response.Codepage 的值来告知它帖子中的字符是如何编码的。这并不明显,因为我们倾向于认为发送者的工作是定义其发送内容的编码。此外,认为与我们想要在响应中发送的内容的编码有关的属性与初始请求的接收方式有任何关系,这也不是一个自然的飞跃。在这种情况下确实如此。
发生的情况是您的表单正在发布字符的 UTF-8 编码版本,但接收的页面没有将其 Response.Codepage 设置为 65001(UTF-8 代码页)。它可能设置为系统 OEM 代码页,如 1252。因此,字符的 UTF-8 编码被解释为两个单独的字符。
我对 ASP 中良好字符处理的建议是:-
这里重要的是,在您读取 ASP 页面中的表单值之前,您需要确保将 Response.Codepage 设置为与发件人编码匹配的代码页,并且这不会自动发生。
【讨论】:
我猜你使用的编辑器不支持 UTF-8,而是将所有内容都转换为 ASCII。
简单的答案是停止在 HTML 页面中使用特殊字符。版权符号应写为© 或©。
【讨论】:
根据我对这个确切问题的经验,我发现这些字符出现了很多,因为 1) 用户在输入内容时使用了非英语字符集(和键盘)(即西班牙语),以及 2)内容未转换为 UTF-8。你在正确的轨道上,检查标题中的内容类型,但你真的必须通过转换器运行内容,如果这种情况继续发生的话。多年前,这个问题让我在使用 Classic ASP 时遭受了数小时的痛苦(我希望我仍然可以访问代码以提供进一步的帮助)。
【讨论】:
® 是 ® 存储为 UTF-8 时的样子,但显示为 ASCII/ISO-8859-1/Windows-1252。使用 meta 标记不足以确保您的页面以 UTF-8 格式提供。您还需要在 Content-Type HTTP 标头中设置编码。此标头通常使用某些服务器范围的设置或以编程方式设置。
我不知道 ASP,但这似乎是您应该如何设置该标头:
这可能会提供更多信息:
http://technet.microsoft.com/en-us/library/bb742422.aspx#EBAA
如果您的数据存储在数据库中,您还需要确保数据也以 UTF-8 格式存储,或者在存储和检索时进行了转换。
【讨论】: