mysql数据库中的特殊字符
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql数据库中的特殊字符相关的知识,希望对你有一定的参考价值。
我有一个mysql数据库,里面有问题和答案,这些问题和答案用html段落和按钮显示。q&a中包含了很多特殊字符,比如é,...,',",ö,还有一些html标签,比如sup。
我试过mysqli_real_escape_string,htmlentities和添加反斜线,但有些字符总是在页面上显示不正确。有时在段落中是正确的,但在按钮上却不正确。
正确的函数是什么,以使所有这些特殊字符正确显示,以及我应该在什么时候使用它(当插入到数据库或从数据库中选择它到HTML?
谢谢
字符集和整理
正如其他人所说,你的问题之一可能是字符集和整理。 你需要确保整个链条(输入、存储和输出)的配置正确,以处理你正在使用的字符。 UTF-8 通常是一个不错的选择,因为它可以处理Unicode字符集中的每一个字符。
要使用不区分大小写的UTF-8创建一个MySQL数据库或表。
CREATE DATABASE mydb
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;
CREATE TABLE mytable ( ... )
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;
逃逸
mysql_real_escape_string (我假设你使用的是php)用于帮助MySQL解析器区分你的参数和SQL关键字。 当整个SQL命令作为单个字符串提供时,就会使用它。
INSERT INTO mytable VALUES ("this " is a double quote");
反斜线是为了帮助MySQL理解字符串中间的双引号实际上是字符串中间的双引号,而不是收尾的双引号。
通过在将数据插入数据库之前对数据进行转义,你直接改变了这些数据:你不再存储原始数据,因此,当你从数据库中检索数据时,必须再次对其进行处理(解除转义)。
预备语句
为了让事情更简单,对你和Mysql来说,你可以使用 编制的报表 来代替。 预备语句使用占位符向MySQL确切地显示SQL语句的哪些部分是你的参数。
$stmt = $dbh->prepare("INSERT INTO mytable VALUES (?)");
$stmt->execute(array('this " is a double quote'));
通过使用准备好的语句,你可以不加修改地将数据插入到数据库中--不需要进行混乱的转义。 这样做还有一个好处,就是可以大大降低SQL注入的可能性。 请看 比尔-卡尔文 Sql注入的误区和谬误 说话 和 幻灯片 以获取更多关于此主题的信息。
产量
现在,您的数据以其原始格式存储,您可以按照自己的意愿自由输出。 如果你输出的是HTML(以HTML字面形式显示),那么你需要在输出前对其进行转义。 有很多方法可以做到这一点,包括 htmlspecialchars 和 HTML净化器. 你选择哪种方法取决于你的数据来源,以及你到底想让它如何显示。
如果你确保你的数据库编码和页面编码都是UTF-8,那么这应该对你的工作有很大帮助。
我怀疑问题出在使用的字符集上。 你的mysql整理需要支持你试图使用的字符,而你的网页需要在一个匹配的字符集。
最有可能的是,你的MySQL数据库使用的是latin1_general_ci这样的整理方式,而你的网页应该是以UTF-8显示的。 我建议你将MySQL设置为以UTF-8存储数据,而你的网页应该输出一个头,说明它们是UTF-8。
以上是关于mysql数据库中的特殊字符的主要内容,如果未能解决你的问题,请参考以下文章