代码之家  ›  专栏  ›  技术社区  ›  Nick

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

  •  0
  • Nick  · 技术社区  · 14 年前

    因此类似(#45)的内容作为&存储在数据库中;#40;#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 回复  |  直到 14 年前
        1
  •  2
  •   Nick    14 年前

    我找到了编码发生的地方。在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();
    }
    

    function beforeSave() {
        if (!empty($this->data)) {
            $this->data = Sanitize::clean($this->data, array('escape' => false, 'carriage' => true, 'encode' => false));
        }       
        return parent::beforeSave();
    }
    
        2
  •  1
  •   d-_-b    14 年前

    因为这是进一步的线,这应该是很容易找出它发生在哪里。调试PHP的一站式惰性解决方案:

    print_r($data); die;
    

    但你可能已经这么做了。

        3
  •  1
  •   Tim Cooper    13 年前


    我认为后面的步骤甚至没有必要,因为表是根据数据库的编码创建的。 确保数据库和表编码正确,然后确保实际使用此设置,以防定义了多个数据库连接。

        4
  •  0
  •   Luke Barker    14 年前

    mysql本身是UTF-8吗?做一个mysql导出/转储,看看每个表后面都写了什么!