我在插入包含土耳其语字符的字符串时遇到了问题。我正在尝试将“öçşığüÖÇŞİĞÜ”作为字符串插入。
我将下面指示的行放入 php 文件的头部:
header("Content-Type: text/html; charset=windows-1254");
我用ajax获取数据(虽然不重要,我自己写)
$json = filter_input_array(INPUT_POST);
这是插入命令:
$query = "INSERT INTO users (name) VALUES ('" . $user->get_name() . "')";
现在,我尝试了两种给变量赋值的情况:
案例一
- php: $name = $json['name'];
- 浏览器:öçşığüÖÇÅÄ°Äãœ
- 数据库:çşığüÖÇŞİĞãœ
案例 2
- php: $name = iconv("UTF-8", "ISO-8859-9", $json['name']);
- 浏览器:öçşığüÖÇŞİĞÜ
- 数据库: çþýðüÖÇÞÝÐÜ
“1”是我指定的字符串类型,“2”是“echo $user->get_name();”的结果取决于“1”处的分配,“3”是数据库单元格中的值。我可以在 CASE 2 的“echo”中得到真实的结果,但是损坏的结果被插入到数据库中。我的数据库排序规则是:“utf8_turkish_ci”。
(PHP 5.4.17,MySQL 5.6.13)
最佳答案
这个问题听起来好像您没有在某处指定字符编码。要解决这个问题,只需确保您已将字符编码设置为 utf-8 everywere(它实际上不需要是 utf-8,只是相同无处不在 -但是如果你搞砸了一些东西并且无论如何都需要改变一些地方,我强烈建议使用 utf-8):
告诉 MySQL 使用 utf-8。为此,请将其添加到您的 my.cnf 中:
collation_server = utf8_unicode_ci character_set_server = utf8
在与 mysql 交互之前,发送这两个查询:
SET NAMES 'utf8'; CHARSET 'utf8';
或者,或者,让 php 在打开连接后执行此操作:
mysql_set_charset('utf8', $conn);
将 UTF-8 设置为数据库的默认字符集
CREATE DATABASE `my_db` DEFAULT CHARACTER SET 'utf8';
对表格做同样的事情:
CREATE TABLE `my_table` ( -- ... ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
假设客户端是浏览器,将您的内容作为 utf-8 和正确的 header 提供:
header('Content-type: text/html; charset=utf-8');
要真正确保浏览器理解,请添加元标记:
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
最后但同样重要的是,告诉浏览器使用 utf-8 提交表单
<form accept-charset="utf-8" ...>
或在此处检查 smiler 问题。 MYSQL - Turkish character
关于php - 使用 PHP 插入 MySQL 数据库时出现土耳其字符问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27719817/