【问题标题】:Safe way to save strings using doctrine with accentuated characters使用带有强调字符的原则保存字符串的安全方法
【发布时间】:2014-05-19 15:51:06
【问题描述】:

我在一个内置于 codeigniter + 教义的简单 web 应用程序中有一个奇怪的(对我来说)行为。

我有一个本地 apache 服务器,我使用相同的代码共享主机,两个应用程序连接到同一个数据库(托管在共享主机中)

此数据库具有 UTF-8 Unicode 字符集和 utf8_general_ci 排序规则。

所有表单和页面都有这样的元字符集。

<!DOCTYPE html>
<html lang="es" xml:lang="es">
<head>
    <meta charset="utf-8">

问题是,在一台服务器(假设是本地服务器)中,我放置了类似“institució”的内容,我保存它并且可以正常查看,但是,在另一台服务器(远程服务器)上,我看到了类似“instituci �"

然后我去共享主机,我把这个词固定为“institució”,然后我在本地服务器上看到这个词显示为“institució”

我不能使用“utf8_decode”或“utf8_encode”,因为根据我保存此字符串的位置,我必须解码或编码。

我确定我缺少一些配置,但我不知道从哪里开始。

我已经在本地安装了 Mavericks 的默认 apache2 服务器。

我检索帖子数据并将其保存到学说对象中,如下所示:

$question->setQuestion($this->input->post('question'));

我认为 codeigniter 和教义可以解决这个问题。

谢谢!

【问题讨论】:

    标签: codeigniter doctrine non-ascii-characters


    【解决方案1】:

    解决了!

    我应该有更多的耐心。解决方案是向位于 application/libraries/Doctrine/doctrine.php 的 connectionOptions 数组添加一个新选项

    新选项名为 driverOptions,如下所示:

            'driverOptions' => array(
                1002=>'SET NAMES utf8'
            )
    

    所以整个connectionOptions是这样的:

        // Database connection information
        $connectionOptions = array(
            'driver' => 'pdo_mysql',
            'user' => $db['default']['username'],
            'password' => $db['default']['password'],
            'host' => $db['default']['hostname'],
            'dbname' => $db['default']['database'],
            'charset' => 'utf8',
            'driverOptions' => array(
                1002=>'SET NAMES utf8'
            )
        );
    

    这个新选项解决了我因服务器而具有不同行为的问题。

    希望它可以帮助某人!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-02
      • 2015-09-22
      • 2017-04-14
      • 2019-10-01
      • 2014-10-04
      • 1970-01-01
      • 2020-12-11
      • 1970-01-01
      相关资源
      最近更新 更多