浏览器是HTML在发送之前对字符进行编码?

时间:2011-09-17 09:44:43

标签: html character-encoding asp-classic html-form

我无法相信我在这看到的东西!我有一个正常的,基本的html表单(没有更改enctype),如果有人在字段中放置一个奇怪的日语字符并在我的数据库中发布表单,它将保存该字符的HTML编码版本。除了使用Trim()之外,我根本不处理字符串。使用经典ASP(我可能会添加!)。我有一种感觉,这可能与utf-8 /编码有关,但我已经尝试搞乱元标记和内容类型,并且无法让角色正常通过。为了让事情变得更难,我似乎无法在VS express 2010中获得经典的ASP调试。任何评论都赞赏:)

1 个答案:

答案 0 :(得分:0)

正如您在this demo中看到并在standard (4.10.22.6.4.2)中读到的那样,所选编码不支持的字符(例如ISO8859- *或cp1252编码中的日文字符)被编码为HTML实体。

如果你没有错误地处理包含html实体的用户输入,你可以用相应的Unicode字符替换用户输入中的所有数字HTML实体(但是,在ASP中这样做很难,因为没有逆功能到Server.HTMLEncode并且首先不存在Unicode支持。

作为替代方案,使用UTF-8(和/或本千年的网络开发平台),所有这些问题都会消失。但是,由于这可能不是一个选项,您可能希望在不同的程序中取消HTML实体,例如在C#中使用HttpUtility.HtmlDecode,在PHP中使用html_entity_decode或在Python中使用HTMLParser.unescape