Я начал веб-сайт некоторое время назад, используя неправильный 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; }
Что касается конкретных инструкций по использованию этого, я предлагаю следующее:
* Пример:
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/
Я могу сказать, что этот метод работает, потому что я использовал его для преобразования данных из базы данных, которую я создал.