我的脚本中有一个小表单,我的(德国)用户应该在其中输入一些文本。
<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/