Проблема с кодировкой при вставке текста в базу данных MySQL с PHP - PullRequest
1 голос
/ 27 июня 2011

Я пытаюсь вставить текст в базу данных MySQL из формы, используя PHP.
Проблема в том, что когда я проверяю базу данных в phpmyadmin, я обнаруживаю, что специальные символы, такие как ü, ö, ä, è, é, à ... повреждены, и я получаю такие вещи, как üöäéèÃ. Я пробовал следующее :

  • Ввод accept-charset="latin1_swedish_ci" в тег <form>
  • Установка default_charset = "latin1_swedish_ci" в файле php.ini
  • Помещение mysqli_set_charset($dbc, 'latin1_swedish_ci'); и mysql_query('SET NAMES latin1_swedish_ci'); после функции mysqli_connect()
  • Установка сопоставления базы данных, таблицы и отдельных столбцов на latin1_swedish_ci

Я заметил, что при выполнении запроса непосредственно в phpmyadmin значения не были повреждены, поэтому я предполагаю, что ошибка должна быть где-то в PHP и / или в соединении MySQL.
Кроме того, я попытался сделать то же самое с utf-8_general_ci, и получил те же результаты. Кажется, я игнорирую все, что я делаю.
Советы и идеи приветствуются. Спасибо, ребята,
Шон

Ответы [ 6 ]

3 голосов
/ 27 июня 2011

Я не могу правильно сказать, является ли это причиной вашей проблемы, но в любом случае вы не можете поместить Mysql-спецификатор charset и collation ни в HTML-форму, ни в PHP.ini.

Rightтеперь вы используете слепое значение MySQL и помещаете его везде, где считаете нужным - даже не подозревая.Не делай этого.Прежде всего решите, какую кодировку вы хотите использовать и принять.На ваш вопрос я бы сказал, что это latin1 .

Итак, настройте HTML и PHP соответствующим образом:

<form accept-charset="latin1">

Для элемента формы HTML.Обратите внимание, что в HTML нет latin1_swedish_ci, см. Документ HTML .

Следующий и аналогичный пункт находится в настройке php.ini.Там не существует чего-то, как вы положили туда.Измените его на latin1 :

default_charset = "latin1"

После исправления этих двух настроек браузер узнает, какая кодировка страницы содержит форму, и форма даже сигнализируетБраузер принимает принятую кодировку данных, переданных обратно на сервер.

Таким образом, это должно гарантировать, что данные, которые у вас есть внутри переменных PHP, имеют кодировку latin1 .Затем вы можете передать эти данные в свою базу данных, если правильно настроили кодировку клиента базы данных, сервер базы данных, кодировку соединения между ними и, естественно, кодировку данных в базе данных.

Тем не менее, правильная настройка формы - это самый первый шаг, который вам нужно сделать, прежде чем вы сможете убедиться, что соединение mysql не мешает.

3 голосов
/ 27 июня 2011

Не уверен, пробовали ли вы это или нет ... но у меня была такая же проблема при вставке иврита в базу данных MySQL. Я сделал следующее: Таблицы базы данных являются параметрами сортировки: utf8_unicode_ci

В PHP я делаю это:

@ $db = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName);
$db->set_charset('utf8');

Я создаю новое соединение и затем указываю соединение как UTF-8.

Это решило мою проблему при работе с ивритом ...

0 голосов
/ 15 декабря 2014

Для тех, кто пользуется ивритом:

HTML СТРАНИЦА:

<html lang="he">
  <head>
    <meta charset="utf-8">

ФОРМА PHP

header('Content-Type: text/html; charset=UTF-8');
$con = mysqli_connect("HOST","DB_USER","PASSWORD","DB_NAME");
$con->set_charset('utf8');

DB, TABLE, FEILDS COLLATION

utf8_general_ci

0 голосов
/ 11 июня 2013

Вы можете использовать пользователя

mysql_query("set character_set_results='utf8'");

перед выполнением запроса MySQL

0 голосов
/ 27 июня 2011

Я думаю, вы должны установить символьное завершение страницы на:

<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
0 голосов
/ 27 июня 2011

Убедитесь, что параметры сортировки и сопоставления подключения MYSQL равны latin1_swedish_ci

...