经典的ASP gremlims,每当使用HTML特殊字符时都会插入文本

时间:2008-12-08 18:42:13

标签: asp-classic utf-8

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

有什么想法吗?

感谢您随时提供此服务。这让我疯了。 -m

4 个答案:

答案 0 :(得分:11)

最基本的问题是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设置为与发件人编码匹配的代码页,这不会自动发生。

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

如果它以UTF-8格式存储,则显示为®/ 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存储,或者在存储和检索数据时进行转换。