【问题标题】:Browser is HTML Encoding a character before sending it?浏览器在发送之前是否对一个字符进行 HTML 编码?
【发布时间】:2011-11-19 05:05:14
【问题描述】:

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

【问题讨论】:

  • 我可能有一种感觉,这可能与经典的 ASP 有关;) 你能给我们一个演示 URL 或至少 HTML 源代码中的前几行和Content-Type HTTP 标头吗?
  • 哇 18 秒!我听说过这个网站,但没想到会那么快! :) 感谢您的回复,我现在不在工作,所以我不能,再加上它是一个管理员系统,所以不能提供 URL。如果我在这里确实有代码并且我展示了它,那么您将看到的只是 asp 页面的正常开始,我们没有做任何设置内容类型或编码的操作 - 开始 标记也没有任何关于编码的内容,并且
    标签只有一个名称,没有 enctype。你的帖子让我觉得我需要使用像 sam spade 这样的东西来检查内容类型和各种标题,所以谢谢:)
  • 别太激动,这还不是答案;)如果你不包含任何形式的编码规范,浏览器会猜测,结果这种猜测是不可预测的。如果可能,只需在<head> 之后直接添加<meta http-equiv="content-type" content="text/html; charset=utf-8"/> 并在所有地方使用UTF-8。
  • 嗯,我昨天从网上找到的东西中尝试了“类似”的东西 - 虽然它可能不是“完全”,所以我会记下来并在星期一第一件事尝试。非常感谢,我会在星期一发布更新:)
  • 好的,那就在周一更新问题。还有一件事:如果您想通知我更改,请以@phihag 开头发表评论(当您直接在此发布时不需要)。周末愉快。

标签: html character-encoding asp-classic forms


【解决方案1】:

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

如果您可以正确处理包含明文的 html 实体的用户输入,您可以将用户输入中的所有数字 HTML 实体替换为相应的 Unicode 字符(但是,在 ASP 中这样做很困难,因为没有逆向Server.HTMLEncode 的函数和 Unicode 支持几乎不存在。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    • 2014-06-05
    相关资源
    最近更新 更多