У меня проблемы со вставкой строк, включающих турецкие символы. Я пытаюсь вставить «öçşığüÖÇŞİĞÜ» как строку.
Я поместил указанную ниже строку в заголовок файла 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 для этого.
Я решил только
большое спасибо.