字母变成“ë”

时间:2012-04-26 17:04:04

标签: asp.net .net sql-server

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

ë

如何在数据库中存储它? 我的网站建立在.NET和Iam上,使用C#语言。

2 个答案:

答案 0 :(得分: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”文章是绝对必读的

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

答案 1 :(得分: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获得的所有文本进行编码,那些JavaScripts将永远不会运行,因为它们将被视为文本而不是可执行代码。