如何使用CodeIgniter在MySQL中插入HTML实体?

时间:2012-01-15 15:39:39

标签: php mysql codeigniter html-entities

我正在使用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()函数,我面临两个问题,我在下面的评论中提到:

2 个答案:

答案 0 :(得分:4)

您可能在输入输出上遇到问题。

输入

首先,确保您实际收到的字符串 utf-8。

  • 如果您收到表单中的数据,请将accept-encoding="utf-8"添加到form元素。
  • 验证您的输入字符串是否为TRUE===mb_check_encoding($string, 'UTF-8')
  • 的有效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')。

在存储数据之前,请勿对数据使用htmlspecialcharshtmlentities。在视图中使用输出中的那些。

输出

确保无论您使用什么来查看数据库中出现的数据都需要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\'');