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

Some Opencart's modules doesn't support UTF8 and showing ???? instead of characters

在某些情况下,Opencart 模块不支持 RTL 语言和 UTF8 字符,它会显示 ????????? 个字符而不是您的 Persian/Arabic 个字符。
我应该怎么做使用这些模块可以正确显示我的角色吗?

有几种方法:

1) 使用sql查询:

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

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

您应该将这些查询放入您的数据库驱动程序文件中。在这里我使用我的 sqli 然后我应该把代码放在 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,并在另存为 windows 中将 encoding 更改为 UTF-8(如果该文件正在使用 echo or print 来显示一些字符串...

希望对您有所帮助。