2

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

ë

我怎样才能像这样将它存储在数据库中?我的网站建立在 .NET 之上,而我使用 C# 语言。

4

2 回答 2

4

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”文章绝对是必读的

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

于 2012-04-26T17:10:56.177 回答
0

你需要HtmlEncodeHtmlDecode功能。

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

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

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

string encoded = HttpUtility.HtmlEncode("Noël")
string decoded = HttpUtility.HtmlDecode("No&#235;l")

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

于 2012-04-26T18:43:33.893 回答