一些Opencart的模块不支持UTF8并显示????而不是字符

时间:2017-05-28 23:17:01

标签: mysqli utf-8 opencart

在某些情况下,Opencart的模块不支持RTL语言和UTF8字符,它将显示?????????个字符而不是您的波斯语/阿拉伯字符。
我应该如何处理这些模块以显示我的角色正确吗?

1 个答案:

答案 0 :(得分:1)

有几种方法:

1)使用sql查询:

在这种情况下,您可以使用一些查询,例如:

$this->db->query("SET NAMES 'utf8'");
$this->db->query("SET CHARACTER SET utf8;");
$this->db->query("SET character_set_connection=utf8;");

您应该将这些查询放在数据库驱动程序文件中。我在这里使用mysqli然后我应该将mysqli.php中的代码放在这个目录opencart\system\library\db\mysqli.php中,如下所示:

public function __construct($hostname, $username, $password, $database, $port = '3306') {
        $this->link = new \mysqli($hostname, $username, $password, $database, $port);

    if ($this->link->connect_error) {
        trigger_error('Error: Could not make a database link (' . $this->link->connect_errno . ') ' . $this->link->connect_error);
        exit();
    }

    $this->link->query("SET NAMES 'utf8'");
    $this->link->query("SET CHARACTER SET utf8");
    $this->link->query("SET character_set_connection=utf8;");
    $this->link->query("SET SQL_MODE = ''");
}

2)更改数据库字符集:

但有些情况下它不会解决你的问题。然后你应该检查你的数据库Collation表中的所有表和列,你应该将它设置为utf8_general_ci

为此,您可以使用ALTER TABLE YOUR_TABLE_NAME DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;更改表的字符集,并使用ALTER TABLE YOUR_TABLE_NAME CHANGE COLUMN_NAME CHARACTER SET utf8 COLLATE utf8_general_ci;更改列字符集。

请注意,如果有很多表和列,您可以将文件导出为.sql格式,然后用记事本打开并替换所有latin1(这是我的文件字符集,也许是在您的文件中有所不同),utf8并保存并使用这个新的数据库文件。

3)更改文件格式:

在这种情况下,您应该使用记事本打开文件并使用file menu / save as,并在另存为窗口时将encoding更改为UTF-8(如果文件正在使用{{ 1}}显示一些字符串......

希望它有所帮助。