我在插入包含土耳其字符的字符串时遇到问题。我想插入“öçşığüÖÇŞİĞÜ”作为字符串。
我把下面指出的行放到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() . "')";
现在,我尝试了两种为变量赋值的案例:
案例1
案例2
“1”是我的字符串分配类型,“2”是“echo $ user-> get_name();”的结果。取决于“1”处的赋值,“3”是数据库单元格中的值。我可以在CASE 2中获得“echo”中的真实结果,但是将损坏的结果插入到数据库中。我的DB校对是:“utf8_turkish_ci”。
(PHP 5.4.17,MySQL 5.6.13)
答案 0 :(得分:3)
这个问题听起来像你错过了在某处指定字符编码。为了解决这个问题,只需确保你已经将字符编码设置为 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('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
答案 1 :(得分:2)
如果你使用utf-8,这个问题就不会发生了。
我的建议是将编码转换为utf8。
答案 2 :(得分:1)
我认为您使用了utf 8,请尝试
header('Content-Type: text/html; charset=utf-8');
在mysql部分你必须使用
mysql_query("set names 'utf8'");
示例php
<html>
<head>
<title>Title</title>
<meta charset="UTF-8" />
</head>
<body>
<?php
mysql_query("set names 'utf8'");
$sql = "select name from users";
//........
//........
//echo "abc";
?>
</body>
<html>
答案 3 :(得分:1)
您应该在对此表的任何查询之前添加MySQL查询:
SET NAMES 'utf8_turkish_ci' / SET NAMES 'ISO-8859-9'
或
$params = [
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'ISO-8859-9\'',
];
$pdo = new PDO($dsn, $username, $passwd, $params];
不要使用iconv。
答案 4 :(得分:0)
我只解决了
非常感谢。