我正在开发一个较老的经典ASP网站,并且有一个表单允许用户输入一些文本(进入多行文本框),如果他们添加了像®(注册商标)这样的html字符,它会正确插入.但当他们使用相同的表格编辑数据时,更新会在注册商标前添加随机的"Â"(抑扬音).内容类型为utf-8.
有任何想法吗?
谢谢你随时给这个.这让我疯了.-m
最基本的问题是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设置为与发件人编码匹配的代码页,这不会自动发生.