【问题标题】:Letters becoming "ë"字母变成“ë”
【发布时间】:2012-04-26 17:04:03
【问题描述】:

我有一个网站,还有几个文本框。如果用户填写包含字母“ë”的内容,则变为:

ë

我怎样才能像这样将它存储在数据库中? 我的网站是基于 .NET 构建的,我使用 C# 语言。

【问题讨论】:

  • 你的特殊字符会变成ascii,在大多数情况下没什么大不了的,除非它导致你出错。

标签: asp.net .net sql-server


【解决方案1】:

ASP.Net(您的服务器端应用程序)和 SQL Server 都支持 Unicode。它们可以处理不同的语言和不同的字符集:

http://msdn.microsoft.com/en-us/library/39d1w2xf.aspx

在内部,ASP.NET 网页背后的代码处理所有字符串数据 作为Unicode。您可以设置页面如何对其响应进行编码,从而设置 HTTP 标头的 Content-Type 部分的 CharSet 属性。 这使浏览器能够在没有元标记或 必须从内容中推断出正确的编码。你也可以 设置页面如何解释请求中发送的信息。

最后,您可以设置 ASP.NET 解释页面内容的方式 本身——换句话说,物理 .aspx 文件的编码 磁盘。如果您设置文件编码,则所有 ASP 页面都必须使用该编码 编码。 Notepad.exe 可以保存当前编码的文件 系统 ANSI 代码页,UTF-8 或 UTF-16(也称为 Unicode)。 ASP.NET 运行时可以区分这三种编码。这 物理 ASP.NET 文件的编码必须与 在@Page 文件中指定编码属性。

这篇文章也很有帮助:

http://support.microsoft.com/kb/893663

这篇“Joel-on-Software”文章绝对值得一读

请阅读所有三篇文章,如果有帮助,请告诉我们。

【讨论】:

    【解决方案2】:

    您需要HtmlEncodeHtmlDecode 函数。

    SQL Server 可以处理 ë 和任何其他本地或“不寻常”字符,但 HTML 不行。这是因为某些字符在 HTML 中具有特殊含义。最好的例子是<>,它们对 HTML 语法很重要,但还有更多。出于某种原因,ë 也很特别。为了能够显示这样的字符,它们需要在传输为 HTML 之前进行编码。传输也意味着发送到浏览器。

    因此,尽管您在浏览器中看到ë,但您的应用程序正在以编码版本ë 处理它,并且它始终采用这种形式,包括数据库。如果您希望ë 在 SQL Server 中保存为ë,您需要先对其进行解码。记得在页面上显示之前将其编码回ë

    使用这些功能分别在保存/显示之前对所有文本进行解码/编码。他们只会转换特殊字符,而忽略其他所有内容:

    string encoded = HttpUtility.HtmlEncode("Noël")
    string decoded = HttpUtility.HtmlDecode("Noël")
    

    对编码文本进行操作还有另一个重要原因 - JavaScript 注入。这是对您网站的一种攻击,旨在通过将 JavaScript 块放入编辑/备忘录框中来破坏它,希望它们会在其他人的浏览器上执行。如果您对从 UI 获得的所有文本进行编码,这些 JavaScript 将永远不会运行,因为它们将被视为文本而不是可执行代码。

    【讨论】:

      猜你喜欢
      • 2011-11-28
      • 1970-01-01
      • 2013-10-03
      • 2022-06-14
      • 1970-01-01
      • 2022-01-04
      • 2016-12-07
      • 1970-01-01
      • 2020-01-29
      相关资源
      最近更新 更多