字符编码,Debian上的语言环境问题

时间:2019-04-24 12:46:28

标签: character-encoding debian

我将vps与debian 9,mariadb 10.3.x,php7.0(标准LAMP)一起使用。 我必须更新所有软件包。删除并安装并导入数据库后,其所有字符如下所示:“Tch�rzewski” 我检查数据库中的编码(是否设置为utf8_general_ci),并且所有表都具有相同的编码。在数据库中,我当然有正确版本的字符串。 我还检查了这是输出的语言环境:

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=pl_PL.UTF-8
LANGUAGE=
LC_CTYPE="UTF-8"
LC_NUMERIC="UTF-8"
LC_TIME="UTF-8"
LC_COLLATE="UTF-8"
LC_MONETARY="UTF-8"
LC_MESSAGES="UTF-8"
LC_PAPER="UTF-8"
LC_NAME="UTF-8"
LC_ADDRESS="UTF-8"
LC_TELEPHONE="UTF-8"
LC_MEASUREMENT="UTF-8"
LC_IDENTIFICATION="UTF-8"
LC_ALL=UTF-8

我检查每个文件(具有meta utf-8),并且在php中的文件中,我具有ini_set('default_charset','utf-8') 我尝试

header("Content-Type: text/html; charset=utf-8");

但这没有帮助

我现在该怎么办?我可以重新安装服务器,但我不想为此浪费很多时间

1 个答案:

答案 0 :(得分:0)

通过添加到PDO mysql-attr_init_command解决了我的问题。现在所有的pdo命令都看起来像:

$db = new PDO('mysql:host='._DBHOST_.';port=8889;dbname='._DBNAME_, _DBUSER_, _DBPASS_, 
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);