1

我在数据库中存储大量文本。问题是,当我尝试存储引号(''“”而不是“')时,它们可以很好地存储在数据库中,尽管在我显示数据库中的文本时不显示。!

我尝试将 sql 中的排序规则更改为 utf8_unicode_ci,但仍然没有改变

(' ' “ ” not " ') 被一个方形黑框内的问号代替

列类型排序规则属性 Null 默认额外操作

     2  qr_topics   text    utf8_unicode_ci     No  None
4

3 回答 3

1

您需要htmlentities()在显示之前运行您的数据库返回!

$results = $pdo->fetchAll();

foreach($results as $result) {
    echo htmlentities($result['fieldQuotesAndOtherGoodies']);
}

这不仅是一种很好的做法(尤其是在使用不同的字符集或括号时,<and >,您必须对其进行编码,因为否则它们将被解释为 HTML 标记),这对于安全性也是非常重要的。如果不对从数据库中检索到的用户数据进行编码,您的站点可能容易受到 XSS(以及因此的 CSRF)攻击。

仅供参考:解决方案是简单地添加一个元标记,以确保交付的 HTML 被浏览器解释为 UTF-8:

<meta charset="UTF-8" />
于 2012-06-16T03:31:49.977 回答
1

mysql_query('SET CHARACTER SET utf8, NAMES utf8');

它对我有用!

于 2016-05-17T00:14:28.923 回答
0

确保通过 htmlentities() 插入代码。并在检索它时使用 html_entity_decode()。我同意@PhpMycoder。使用字符集“utf-8”或您喜欢的任何字符集,但将其传递给函数。

在发送到服务器时使用

htmlentities ($_POST['textarea'], ENT_QUOTES, 'utf-8');

and while retriving

html_entity_decode($_POST['textarea'], ENT_QUOTES, 'utf-8');
于 2012-06-24T05:02:57.693 回答