Моя проблема в том, что каким-то образом я получил в своей базе данных символы, такие как à, é, ê в простом формате или в кодировке utf8. После исследования я пришел к выводу, что какой-то браузер (я не знаю IE, FF или другой) кодирует отправленные входные данные, поскольку не было намеренно добавлено кодирование utf8 для обработки форм отправки. Итак, если бы я читал данные с помощью utf8_encode, я изменил бы другие простые символы и наоборот.
Мое решение, после того как я изучил решения, приведенные выше:
1. Я создал новую базу данных с charset utf8
2. Импортировал базу данных ПОСЛЕ того, как я изменил определение набора символов в операторе CREATE TABLE в файле дампа sql с латыни .... на UTF8.
3. импортировать данные из исходной базы данных
(до тех пор, пока здесь, возможно, будет достаточно просто изменить кодировку на существующих БД и таблицах, и это только в том случае, если исходный БД не является utf8)
4. обновить содержимое в базе данных напрямую, заменив символы в кодировке utf8 на простой формат, например,
UPDATE `clients` SET `name` = REPLACE(`name`,"é",'é' ) WHERE `name` LIKE CONVERT( _latin1 '%é%' USING utf8 );
Я поместил в db class (для php-кода) эту строку, чтобы убедиться, что это UTF8-связь
$ this-> query ('SET CHARSET UTF8');
Итак, как обновить? (шаг 4)
Я построил массив с возможными символами, которые могут быть закодированы
$special_chars = array(
'ù','û','ü',
'ÿ',
'à','â','ä','å','æ',
'ç',
'é','è','ê','ë',
'ï','î',
'ô','','ö','ó','ø',
'ü');
Я построил массив с парами таблиц, поля, которые должны быть обновлены
$where_to_look = array(
array("table_name" , "field_name"),
..... );
чем,
foreach($special_chars as $char)
{
foreach($where_to_look as $pair)
{
//$table = $pair[0]; $field = $pair[1]
$sql = "SELECT id , `" . $pair[1] . "` FROM " .$pair[0] . " WHERE `" . $pair[1] . "` LIKE CONVERT( _latin1 '%" . $char . "%' USING utf8 );";
if($db->num_rows() > 0){
$sql1 = "UPDATE " . $pair[0] . " SET `" . $pair[1] . "` = REPLACE(`" . $pair[1] . "`,CONVERT( _latin1 '" . $char . "' USING utf8 ),'" . $char . "' ) WHERE `" . $pair[1] . "` LIKE CONVERT( _latin1 '%" . $char . "%' USING utf8 )";
$db1->query($sql1);
}
}
}
Основной идеей является использование функций кодирования mysql, чтобы избежать кодирования между mysql, apache, browser и back;
ПРИМЕЧАНИЕ: у меня не было доступных функций php, таких как mb _....
Лучший