[英]Turkish character issue while inserting into MySQL database with PHP
我在插入包含土耳其语字符的字符串时遇到麻烦。 我正在尝试将“öçşığüÖÇŞİĞÜ”作为字符串插入。
我将以下所示的行放入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”是数据库单元中的值。 在案例2中,我可以在“回声”中得到真实的结果,但是损坏的结果将插入数据库中。 我的数据库排序规则是:“ utf8_turkish_ci”。
(Php 5.4.17,MySQL 5.6.13)
这个问题听起来像您错过了在某处指定字符编码的问题。 要解决这个问题,只需确保将所有字符编码都设置为utf-8 (实际上并不需要是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" ...>
或在这里检查笑脸问题。 MYSQL-土耳其语字符
如果您使用utf-8,则不会发生此问题。
我的建议是将编码转换为utf8。
我认为您使用过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>
您应该在对该表进行任何查询之前添加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。
我只解决了
非常感谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.