我正在尝试将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();
任何想法?
答案 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导出/转储,看看每个表后面的内容!