我正在使用CodeIgniter / MySQL创建一个应用程序。问题是当我存储带引号或撇号的文本时。它将空白值存储到MySQL数据库。
function add_article($title, $desc){
$data = array(
'title' => htmlentities($title, ENT_QUOTES, "UTF-8"),
'desc' => htmlentities($desc, ENT_QUOTES, "UTF-8")
);
if($this->db->insert('articles', $data)){
return TRUE;
} else {
return FALSE;
}
}
我的表“articles”的字符集是“utf8”,COLLATE是utf8_unicode_ci。 HTML字符集也是UTF-8。怎么了?请帮助我,并提前感谢。如果我不使用htmlentities()函数,我面临两个问题,我在下面的评论中提到:
答案 0 :(得分:4)
您可能在输入或输出上遇到问题。
首先,确保您实际收到的字符串 utf-8。
accept-encoding="utf-8"
添加到form
元素。TRUE===mb_check_encoding($string, 'UTF-8')
mb_strlen($string, 'UTF-8')
应返回与您看到的字符数相同的字符数,以及小于strlen($string)
的数字(计算字节数)。在application/config/database.php
中,确保您拥有数据库连接的这两个设置:
$db[$dbgroupname]['char_set'] = "utf8";
$db[$dbgroupname]['dbcollat'] = "utf8_unicode_ci";
将$dbgroupname
替换为您的连接的群组名称(例如'default'
)。
在存储数据之前,请勿对数据使用htmlspecialchars
或htmlentities
。在视图中使用输出中的那些。
确保无论您使用什么来查看数据库中出现的数据都需要utf-8编码。
对于html,请确保您的Content-Type
标题包含charset=utf8
,并且您的html文档的head
如下所示:
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
在多个浏览器中检查结果。有些浏览器会进行字符集嗅探,并且可能会选择与您声明的字符集不同的字符集。如果是这样,这意味着您页面上的某些内容无效UTF-8 - 找到该内容并消除。
如果您正在使用某种数据库查看器(PHPMyAdmin,Navicat等),请确保将连接配置为期望utf-8。
答案 1 :(得分:0)
试试这个:
在DB函数结束时,在 system/database/DB.php
文件中添加此mysql查询。 (在return $DB;
之前)。
$DB->simple_query('SET NAMES \'utf8\'');