PHP-引号字符

PHP-引号字符,php,character-encoding,special-characters,Php,Character Encoding,Special Characters,当我在我的数据库中发布包含“或”等的内容时,我得到以下信息: Don't worry guys, 应该是: Don't worry guys 以下是我向数据库添加文本的方式: $text = $_POST['text']; $text = mb_convert_encoding($text, 'UTF-8', 'UTF-8'); $text = htmlentities($text, ENT_QUOTES, 'UTF

当我在我的数据库中发布包含“或”等的内容时,我得到以下信息:

Don't worry guys, 
应该是:

Don't worry guys
以下是我向数据库添加文本的方式:

$text = $_POST['text'];
            $text = mb_convert_encoding($text, 'UTF-8', 'UTF-8');
            $text = htmlentities($text, ENT_QUOTES, 'UTF-8');
Format  dynamic
Character Set (Sorting) utf8_general_ci
下面是关于数据库中我的表的一些信息:

$text = $_POST['text'];
            $text = mb_convert_encoding($text, 'UTF-8', 'UTF-8');
            $text = htmlentities($text, ENT_QUOTES, 'UTF-8');
Format  dynamic
Character Set (Sorting) utf8_general_ci
使用
htmlspecialchars()
而不是
htmlentities()
在这种情况下获得所需的结果:

htmlspecialchars($text, ENT_COMPAT | ENT_HTML401, 'UTF-8')

虽然这不是避免sql注入的好做法
使用
html\u entity\u decode()
解码html entites来解决这个问题

是的,这就是
htmlentities()
所做的。你期待什么?那么你的问题到底是什么?首先,你似乎正在将输入字符串从UTF-8转换为UTF-8,这是多余的。我不确定这是否是处理PHP多字节字符串的黑客解决方法,如果是,请忽略我的评论。这个问题是由调用htmlentities引起的,它将特殊字符转换为HTML实体。将原始原始UTF-8字符串存储在数据库中。只有当您想将其嵌入到HTML输出中时,您必须确保将HTML控制字符转换为实体,以避免代码注入。我建议在数据库中保存为原始文本,并仅在呈现时转换为HTML。