CakePHP将值保存为MySQL数据库的HTML编码值

时间:2010-08-18 20:59:58

标签: mysql html cakephp encoding

我正在尝试将CakePHP中的某些表格中的某些值保存到MySQL数据库中,当值进入数据库时​​,它们会进行html编码。

类似于(#45)的东西被存储在数据库中,作为(#45)然后当有人试图返回并编辑表格时,他们会看到所有额外的字符。

我已经尝试将数据库连接上的编码设置为utf8,如下所示:

private $production = array(
    'driver' => 'mysql',
    'persistent' => true,
    'host' => 'localhost:3306',
    'login' => '',
    'password' => '',
    'database' => 'db',
    'prefix' => '',
    'encoding' => 'utf8'
);

并在我的配置中设置此项:

Configure::write('App.encoding', 'UTF-8');

并将其添加到我的默认布局:

echo $html->charset();

任何想法?

4 个答案:

答案 0 :(得分:1)

由于它更进一步,所以应该很容易找出它发生的位置。调试PHP的一站式懒惰解决方案:

print_r($data); die;

但你可能已经这样做了。

答案 1 :(得分:1)

我已经确认,到目前为止你所做的所有设置(database.php,core.php,default.ctp)都与我的相同(除了你使用persistent = true,但这应该不是问题)。除此之外,我唯一要做的就是手动将数据库以及每个表设置为utf8_unicode_ci(通过PHPmyAdmin)。
我认为后面的步骤甚至不是必需的,因为表是根据db的编码创建的。 确保正确编码db和表,然后确保实际使用此设置,以防您定义了多个数据库连接。

答案 2 :(得分:1)

我发现了编码发生的地方。在AppModel类中,它调用Sanitize :: clean而不将'encode'设置为false

function beforeSave() {
    if (!empty($this->data)) {
        $this->data = Sanitize::clean($this->data, array('escape' => false, 'carriage' => true));
    }       
    return parent::beforeSave();
}

对于clean方法,我将encode设置为false,它正常工作

function beforeSave() {
    if (!empty($this->data)) {
        $this->data = Sanitize::clean($this->data, array('escape' => false, 'carriage' => true, 'encode' => false));
    }       
    return parent::beforeSave();
}

答案 3 :(得分:0)

是UTF-8中的mysql本身吗?做一个mysql导出/转储,看看每个表后面的内容!