【问题标题】:Special characters in sql not displaying correctlysql中的特殊字符无法正确显示
【发布时间】:2014-06-02 15:03:34
【问题描述】:

我有一个存储在 tsql 数据库中的字符串(预期的字符串应该显示 "a'string")但是当我将它加载到我的网络浏览器中时,我看到 "a'string" 对于所有特殊字符都是相同的。编码在数据库中也保存为"a'string"

我相信我的网页编码与我的数据库不同,这就是导致问题的原因。

运行后:

SELECT SERVERPROPERTY('Collation')

我看到编码设置为SQL_Latin1_General_CP1_CI_AS,我已经放了

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

在我的布局页面的头部。

我非常确信这不是正确的类型,并且正在寻找有关如何解决此问题的指导。

我无法更改有关我的 SQL 服务器的任何内容,这是非常锁定且只读的。

【问题讨论】:

标签: sql character-encoding


【解决方案1】:

这不是您的 SQL 的问题,很可能您的服务器端代码正在使用 htmlentities 将特殊字符转换为 HTML 实体。不知道你用的是什么语言,比如PHP,你可以使用html_entity_decode来正确显示。

$str = "a'string";
echo htmlentities($str,ENT_QUOTES);                                //OUTPUT a&#039;string
echo html_entity_decode(htmlentities($str,ENT_QUOTES),ENT_QUOTES); //OUTPUT a'string

【讨论】:

  • 这行得通,呃,我觉得自己像个傻瓜!!!而我只是使用了 HttpUtility.HtmlDecode。
  • 正如我所说,不确定您使用的是什么语言,我给出了一个基于 PHP 的示例。但这个想法是普遍的。为了安全起见,您应该始终使用准备好的 sql 语句,例如 PDO。而且如果你只希望它正确显示,不要介意它是如何存储在sql中的,那么上面的例子不会对你当前的安全造成任何损害,因为它只是改变了输出。
【解决方案2】:

您的数据库能够使用双字节,这不是问题。您似乎遇到了安全措施——单引号被转义/解码,因此它不会作为单引号(这是 SQL 的字符串分隔符)进入数据库执行。

why "&#39;" is not getting converted to single quotes while using server.htmldecode()?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 2017-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    相关资源
    最近更新 更多