我有一个网站,还有一些文本框。如果用户填写包含字母“ë”的内容,则它会变成:
ë
如何在数据库中存储它? 我的网站建立在.NET和Iam上,使用C#语言。
答案 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)
您需要HtmlEncode
和HtmlDecode
个功能。
SQL Server适用于ë
以及任何其他本地或“不寻常”字符,但HTML不适用。这是因为某些字符在HTML中具有特殊含义。最佳示例是<
或>
,它们对HTML语法至关重要,但还有更多。出于某种原因,ë
也很特别。为了能够显示像他们需要在传输之前编码的字符作为HTML。传输也意味着发送到浏览器。
因此,虽然您在浏览器中看到ë
,但您的应用正在以ë
的编码版本处理它,并且它始终采用包括数据库在内的此形式。如果您希望ë
以ë
的形式保存在SQL Server中,则需要先对其进行解码。在显示页面之前,请务必将其编码回ë
。
分别在保存/显示之前,使用这些功能对所有文本进行解码/编码。他们只会转换特殊字符而不管其他所有内容:
string encoded = HttpUtility.HtmlEncode("Noël")
string decoded = HttpUtility.HtmlDecode("Noël")
操作编码文本还有另一个重要原因 - JavaScript注入。这是对您网站的攻击意图通过将JavaScript块放入编辑/备忘录框来破坏它,希望它们会在其他人的浏览器上的某个点上执行。如果您对从UI获得的所有文本进行编码,那些JavaScripts将永远不会运行,因为它们将被视为文本而不是可执行代码。