【问题标题】:Charset wrong after submitting form and also not correctly inserted into mysql db提交表单后字符集错误,也没有正确插入 mysql db
【发布时间】:2014-03-15 16:50:04
【问题描述】:

我的脚本中有一个小表单,我的(德国)用户应该在其中输入一些文本。

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
....
<body>

<form method="post" accept-charset="utf-8" action="<?php
                                echo htmlentities($_SERVER['PHP_SELF']);
                            ?>
">

....

</form>
...
<h3>Möchten Sie noch....?</h3>
<p>Hier können Sie dies das...
    Es heißt, man soll....
</p>

第一次进入页面时文字是ok的。但是提交表单后,字符集是错误的。所有的“Ö”、“ä”、“ß”等将不再正确显示。 我也试过ISO-8859-15,但没有效果。

在 MYSQL 数据库中也会出现同样的问题。字母没有正确插入,虽然搭配是utf8_general_ci

查询SHOW VARIABLES LIKE 'char%' 返回:

Variable_name               Value   
character_set_client        utf8
character_set_connection    utf8
character_set_database      latin1
character_set_filesystem    binary
character_set_results       utf8
character_set_server        latin1
character_set_system        utf8
character_sets_dir          /usr/share/mysql/charsets/

【问题讨论】:

标签: php mysql forms character-encoding


【解决方案1】:

可能没有其他因素会影响这一点,因为设置排序规则通常是不够的:

  • 默认情况下,您的连接不使用 UTF-8。请在连接到 MySQL 后添加此内容(在进行任何插入之前):

    query("SET NAMES utf8");  
    

    现在检查你的数据,如果新行是正确的,那么就在mysql连接函数之后添加这个。

  • 您的数据未以 UTF-8 格式存储在服务器中。要检查这一点,请运行以下查询:

    show variables like 'char%';
    

    这应该只返回utf8(除了文件系统通常是binary)。如果没有,那么您的 MySQL 服务器没有完全配置为支持 UTF-8。

更新

要将您的 MySQL 服务器设置为完全支持 UTF-8,请编辑 my.cnf 文件(通常在 /etc/mysql 中)并添加以下内容:

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

更改这些后,重新启动您的 MySQL 服务器,连接到 MySQL 并执行以下操作(将数据库更改为您的数据库名称):

use database;
set character_set_database=utf8;
set character_set_server=utf8;

【讨论】:

  • 好的,谢谢。我编辑了我的答案。所以一个问题是我的 MySQL 服务器。但是为什么带有

    的变音符号不能正确显示?

  • 因为您存储的数据是双重编码的。您的服务器实际上将其存储为 UTF-8 转换的拉丁语。我已经更新了关于如何更新服务器/数据库配置的答案。
猜你喜欢
  • 2015-01-19
  • 2016-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-16
  • 2012-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多