php - 提交表单后字符集错误并且也未正确插入到 mysql 数据库中

标签 php mysql forms character-encoding

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

<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>

第一次进入页面时文字正常。但是提交表单后,字符集是错误的。所有“Ö”、“ä”、“ß”等将不再正确显示。 我也尝试过 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/

最佳答案

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

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

    query("SET NAMES utf8");  
    

    现在检查你的数据,如果新行是正确的,那么只需在 mysql connect 函数后面添加这个即可。

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

    show variables like 'char%';
    

    这应该只返回utf8(文件系统通常是二进制除外)。如果没有,那么您的 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;

关于php - 提交表单后字符集错误并且也未正确插入到 mysql 数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22426749/

相关文章:

Mysql - 计算它在没有 groupby 子句的情况下工作

javascript - 将文本 block 添加到 MySQL 数据库

wpf - 不同大小的WPF表单-设计模式与运行时模式

php - Laravel 项目的 Azure Web App 错误 404

php - 当列表的类型为日期而不是时间戳时,MySQL检索过去24小时的数据

mysql - 高级行限制

c# - 如何在窗体之外访问和设置控件的属性?

css - HTML 表单仅在 IE7 中表现出奇怪的行为

javascript - 如何通过 javascript Ajax POST 发送 html 表单的表单参数?

php - 如何使用 ajax 在 Laravel 中删除单个记录