我在数据库中存储大量文本。问题是,当我尝试存储引号(''“”而不是“')时,它们可以很好地存储在数据库中,尽管在我显示数据库中的文本时不显示。!
我尝试将 sql 中的排序规则更改为 utf8_unicode_ci,但仍然没有改变
(' ' “ ” not " ') 被一个方形黑框内的问号代替
列类型排序规则属性 Null 默认额外操作
2 qr_topics text utf8_unicode_ci No None
您需要htmlentities()
在显示之前运行您的数据库返回!
$results = $pdo->fetchAll();
foreach($results as $result) {
echo htmlentities($result['fieldQuotesAndOtherGoodies']);
}
这不仅是一种很好的做法(尤其是在使用不同的字符集或括号时,<
and >
,您必须对其进行编码,因为否则它们将被解释为 HTML 标记),这对于安全性也是非常重要的。如果不对从数据库中检索到的用户数据进行编码,您的站点可能容易受到 XSS(以及因此的 CSRF)攻击。
仅供参考:解决方案是简单地添加一个元标记,以确保交付的 HTML 被浏览器解释为 UTF-8:
<meta charset="UTF-8" />
mysql_query('SET CHARACTER SET utf8, NAMES utf8');
它对我有用!
确保通过 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');