Ошибка в кодировке mysql -> Как я могу переконвертировать его в другое?

Я начал веб-сайт некоторое время назад, используя неправильный CHARSET в моей базе данных и на сайте. HTML был установлен в ISO … и DB на латинский …, страница была сохранена в западной латинской … большой беспорядок.

Сайт находится на французском языке, поэтому я создал функцию, которая заменила все акценты типа «é» на « é ». Что временно разрешило проблему.

Я просто многому научился о программировании, и теперь мои файлы сохраняются как Unicode UTF-8, HTML находится в UTF-8, а мои столбцы таблицы MySQL имеют значение ut8_encoding …

Я попытался перенести акценты на «é» вместо « é », но я получаю обычные проблемы с кодировкой с (?) Или странными символами «Ã ¢» как в MySQL, так и при отображении страницы.

Мне нужно найти способ обновить свой sql, используя функцию, которая очищает строки, чтобы она могла наконец вернуться к нормальной жизни. На данный момент моя функция выглядит так, но не работает:

 function stripAcc3($value){ $ent = array( 'à'=>'à', 'â'=>'â', 'ù'=>'ù', 'û'=>'û', 'é'=>'é', 'è'=>'è', 'ê'=>'ê', 'ç'=>'ç', 'Ç'=>'Ç', "î"=>'î', "Ï"=>'ï', "ö"=>'ö', "ô"=>'ô', "ë"=>'ë', "ü"=>'ü', "Ä"=>'ä', "€"=>'€', "′"=> "'", "é"=> "é" ); return strtr($value, $ent); } 

Любая помощь приветствуется. Заранее спасибо. Если вам нужен код, пожалуйста, сообщите мне, какая часть.

ОБНОВИТЬ

Если вы хотите получить бонусные очки, мне нужны подробные инструкции о том, как это сделать. Благодарю.

Вместо этого попробуйте использовать следующую функцию: она должна обрабатывать все описанные вами проблемы:

 function makeStringUTF8($data) { if (is_string($data) === true) { // has html entities? if (strpos($data, '&') !== false) { // if so, revert back to normal $data = html_entity_decode($data, ENT_QUOTES, 'UTF-8'); } // make sure it's UTF-8 if (function_exists('iconv') === true) { return @iconv('UTF-8', 'UTF-8//IGNORE', $data); } else if (function_exists('mb_convert_encoding') === true) { return mb_convert_encoding($data, 'UTF-8', 'UTF-8'); } return utf8_encode(utf8_decode($data)); } else if (is_array($data) === true) { $result = array(); foreach ($data as $key => $value) { $result[makeStringUTF8($key)] = makeStringUTF8($value); } return $result; } return $data; } 

Что касается конкретных инструкций по использованию этого, я предлагаю следующее:

  1. экспортируйте свою старую базу данных латинского языка (надеюсь, у вас ее все еще есть) в качестве дампа SQL / CSV *
  2. используйте указанную выше функцию в содержимом файла и сохраните результат в другом файле
  3. импортируйте файл, сгенерированный вами на предыдущем шаге, в схему / базу данных, поддерживающую UTF-8

* Пример:

 file_put_contents('utf8.sql', makeStringUTF8(file_get_contents('latin.sql'))); 

Это должно сделать это, если это не даст мне знать.

Возможно, вам захочется выяснить, что используется для исправления ошибок кодирования базы данных WP:

http://codex.wordpress.org/Converting_Database_Character_Sets

Чтобы сократить длинную историю, большинство старых сайтов WP были созданы со шведскими / латинскими сопоставимыми таблицами, которые использовались для хранения строк UTF8. Для правильного сопоставления таблиц подход заключается в изменении столбца на двоичный тип, а затем на его изменение на текст UTF8.

Это позволяет избежать нарушения текста при переходе с Latin1 на UTF8 напрямую.

Вам нужно будет преобразовать нарушающие строки, например, iconv . Задача для вас будет заключаться в том, чтобы знать, какие строки уже являются UTF-8 и которые являются латинскими-1.

Я не совсем уверен, что понимаю ваш вопрос, но если у вас есть

  • база данных UTF-8

  • все специальные символы там хранятся как объекты HTML

затем

 html_entity_decode($string, ENT_QUOTES, "UTF-8"); 

должен сделать трюк и превратить все сущности в свои собственные символы UTF-8.

Убедитесь, что не только ваши таблицы используют utf-8, в вашем соединении с базой данных также должен использоваться utf-8.

 $this->db = mysql_connect(MYSQL_SERVER,DB_LOGIN,DB_PASS); mysql_set_charset ('utf8',$this->getConnection()); 

Если вы хотите обсудить с вашей базой данных в UTF-8, вы должны сообщить базе данных, что поток связи – это поток UTF-8. Вы должны отправить запрос перед каждым запросом, который вы делаете в базу данных, этот запрос в следующем:

«SET NAMES utf8»;

Personnaly Я использую это в файлах connect.inc.php, которые создают соединение с базой данных. Какой из этих заявлений база данных знает, что ваша кодирующая строка UTF-8 и работает отлично!

Функция mysql_set_charset работает некорректно, я пробовал эту функцию в прошлом, но правда в том, что она не делает трюк.

Для вашей полной проблемы, если вы хотите преобразовать строку latin1 в UTF-8, вам нужно сначала преобразовать строку latin1 в формат двоичной строки. Затем преобразуйте двоичную строку в строку UTF-8, все это можно сделать в базе данных с помощью команд базы данных. См. Этот артикул (на французском): http://www.noidea.ca/2009/06/15/comment-convertir-une-db-de-latin1-a-utf8/

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