2

当我添加文本时,我有输入文本的表单
Un sac à main de femme recèlerait une quantité importante de bactéries

它仅在数据库中添加Un sac

我已经尝试使用addlashes、mysql_real_escape_string、htmlspecialchars 等也使用UTF-8 编码,但它仍然无法插入整个字符串

4

8 回答 8

2

为了在数据库中存储非美国字符串,您必须确保正确执行以下 3 个步骤中的每一个:

  1. 您的数据库表必须设置为与法语兼容的字符集。为了未来的证明,我建议使用 UTF-8 创建表。有关详细信息,请参阅MySQL 文档
  2. 在存储和查询时,您的数据库连接必须设置为正确的字符集。为此,请使用mysqli_set_charset()(或您的 MySQL 连接器提供的任何东西)。
  3. 您的输入表单和您的视图页面必须使用准确的字符集作为您的数据。为此,您需要设置以下标题:(header('Content-Type: text/html; charset=UTF-8');如果您使用不同的字符集,请相应地更改它。)

您当然可以使用不同的字符集进行存储和表示,但您为什么要这样做?

此外,在使用数据库和 HTML 时,您应该考虑:

  1. 始终在数据进入数据库时​​对其进行转义。使用或您的数据库连接器提供的任何转义方法。此外,不要使用 设置连接字符集,否则您的连接器库将不知道使用什么字符集进行转义。欲了解更多信息谷歌“sql注入”mysqli_real_escape_string()SET NAMES UTF8
  2. 始终在您的数据进入HTML转义. 还要注意始终提供正确的字符集。欲了解更多信息谷歌“xss”htmlspecialchars()
于 2013-05-16T08:49:25.310 回答
2

您应该utf8_unicode_ci在 orer 中用作列的排序规则,以便在其中添加法语字符串。

于 2013-05-16T08:07:38.133 回答
1

在连续两天打破我的头并阅读所有可能的答案之后,这就是解决问题的方法,并允许我插入额外的奇怪字符,如 em dash 等,并在没有看到奇怪字符的情况下检索数据。

这是完整的分步设置。

db列的排序规则需要是:utf8_general_ci

类型为:varchar(250)

在此处输入图像描述

在 PHP 标头中将默认客户端字符集设置为 UTF8

mysql_set_charset("UTF8", $link);

设置字符集结果,以便我们可以显示法语字符

$sql = "SET character_set_results=utf8";
$result = mysql_query($sql);

在 html 标头中指定,因此您可以查看法语字符:

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

插入数据时不要使用utf8_decode,下面的就可以了

$query = 'insert into tbl (col) VALUES ("'.mysql_real_escape_string($variable).'");

使用普通查询来检索数据,示例查询:

$query = "select * from table;";

终于解决了这个问题,希望这对其他人有帮助。

于 2017-07-14T22:16:11.380 回答
0

为了跟进这一点,我正在使用 dbForge Studio 并只是粘贴法语文本,并且我正确设置了所有排序规则/编码。我没有设置的一件事是连接到数据库的实际编码。设置它UTF8,一切都很好。@Janoszen 答案中的#2。

于 2014-07-24T18:41:23.557 回答
0

在php中:

header ('Content-type: text/html; charset=utf-8');

连接后:

mysql_set_charset("utf8");
于 2013-05-16T08:10:34.567 回答
0

有同样的问题。输入文本来自 ANSII 文件,因此它不是 UTF8,尽管我设置了所有 utf8。utf8_encode(input_text) 解决了它。

于 2015-03-16T20:02:14.617 回答
-1

我努力了

htmlentities()

. .it 将字符串保存在数据库中

于 2013-05-16T08:33:52.873 回答
-1

您应该尝试在 mysql 中插入特殊字符:

$con = mysql_connect($server,$uname,$pass);
$res = mysql_select_db($database,$con)

mysql_set_charset("letin1", $con);
于 2015-12-10T13:00:52.613 回答