Как получить данные utf-8 с помощью php и показать правильную кодировку в дампе excelsheet db?

Привет, я сохраняю в основном английские и немецкие символы в базу данных mysql, которая в настоящее время настроена на кодировку utf-8.

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

Если да, то как я могу изменить кодировку, чтобы исправить немецкие символы, которые теперь сохраняются в utf-8?

ОБНОВЛЕНИЕ

Может быть, тогда это проблема поиска ... Когда я экспортирую данные из базы данных через php, я, конечно, получаю обратно utf-8, могу ли я сделать поиск, чтобы дать мне latin1?

ОБНОВЛЕНИЕ 1

Хорошо, я создаю веб-сайт, кодировка html — uft-8, db — uft-8, и теперь я хочу запустить экспорт и извлечь данные, которые должны быть возвращены в листе Excel, а данные — utf-8, но здесь мне нужно, чтобы символы были latin1 ... или кодировка листа excel, извлеченного из базы данных, должна быть такой, чтобы Töst показал Täst. Прямо сейчас я получаю такие данные -> Töst

ОБНОВЛЕНИЕ 2

Я использую следующий php-скрипт для создания дампа:

http://www.fundisom.com/phparadise/php/databases/mySQL_to_excel

в строке 48 я изменил код на

header("Content-Type: application/$file_type; charset=utf-8");

никаких изменений в поведении.

Как бы я решил проблему?

Почти решение

<?php
$text = "ö is a valid UTF-8 character";
echo 'Original : ', $text, PHP_EOL;
echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL;
echo 'IGNORE   : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL;
echo 'Plain    : ', iconv("UTF-8", "ISO-8859-1", $text), PHP_EOL;
?>

это то, что мне нужно, я думаю... но мне нужно проверить это в контексте php-скрипта... завтра :-)


person mahatmanich    schedule 16.12.2010    source источник


Ответы (4)


Я согласен с предыдущими ответами, что UTF-8 — хороший выбор для большинства приложений.

Остерегайтесь ловушек, которые могут поджидать вас! Вы должны быть осторожны, чтобы использовать согласованную кодировку символов во всей вашей системе (формы ввода, выходные веб-страницы, другие внешние интерфейсы, которые могут получать доступ к данным или изменять их).

Я провел несколько неприятных часов, пытаясь понять, почему простой или был искажен на моей веб-странице, только чтобы обнаружить, что что-то где-то напортачило с кодировкой. Я даже видел случаи, когда текст обрабатывался несколькими кодировщиками — однажды одна кавычка превратилась в восемь байтов.

Итог: не думайте, что будет сделан правильный перевод; четко указывать кодировку символов во всем проекте.

Редактировать: я вижу в вашем обновлении, что вы уже начали открывать для себя эту особую радость. :)

person eaj    schedule 16.12.2010

Как только вы используете двухбайтовые символы, такие как UTF-8, пути назад уже нет...

Чем ближе вы можете использовать iconv

как это

<?php
$text = "ü is still a valid ISO-8859-1";
echo 'Original : ', $text, PHP_EOL;
echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL;
echo 'IGNORE   : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL;
echo 'Plain    : ', iconv("UTF-8", "ISO-8859-1", $text), PHP_EOL;
?>

подробности: http://php.net/manual/en/function.iconv.php

person ajreal    schedule 17.12.2010
comment
но зачем мне конвертировать данные, если я пишу свой лист excel в utf8? - person mahatmanich; 17.12.2010
comment
Не на 100% уверен, что excel разрешает UTF-8, что означает, что UTF-8 будет иметь двойное кодирование... в то время как вернуться к ASCII, способному сохранить, по крайней мере, для умлаутов - person ajreal; 17.12.2010
comment
Я все еще в замешательстве по этому вопросу. Как бы это выглядело, если бы данные были правильно сохранены в БД как uft-8? - person mahatmanich; 17.12.2010
comment
Если вы сделаете такой запрос, как select 'ä', length('ä'), char_length('ä');, он должен вернуть ä,2,1. Если вы используете вывод (кодировка UTF-8), он также должен возвращать ä. Есть другая среда, которая изменит результат (например, кодировка, используемая в php для соединения с mysql) - person ajreal; 17.12.2010

С UTF-8 вы можете хранить любой символ, поддерживаемый Unicode. С UTF-8 вы можете хранить любой символ, поддерживаемый Unicode, поэтому у вас не должно возникнуть проблем с его использованием для хранения только символов latin1 (которые представляют собой очень небольшое подмножество символов). что поддерживает Юникод).

Итак, для хранения информации все в порядке; если вам нужно выполнить какие-либо преобразования при извлечении данных, это зависит от соединителя, который вы используете для получения данных из БД, и от того, как ваш язык программирования обрабатывает строку.


Для обновления: если вы используете PHP для создания веб-страниц, не могли бы вы просто отправить правильный заголовок HTTP, указывающий, что ваша страница закодирована в UTF8?

person Matteo Italia    schedule 16.12.2010
comment
хорошо, что бы это сделать? Перевести все данные в UTF-8, даже äöü, и правильно записать в базу? - person mahatmanich; 17.12.2010
comment
Да, я бы пошел таким путем. Используя UTF-8 во всем приложении, вы не ограничиваетесь каким-либо языком, поэтому, как только он заработает, у вас не должно возникнуть проблем с любым символом, который может вводить пользователь. - person Matteo Italia; 17.12.2010
comment
Где именно вы берете эту проблему? - person Matteo Italia; 17.12.2010
comment
Что вы используете для его создания (Excel через ODBC/PHP/...)? - person Matteo Italia; 17.12.2010

UTF-8 — лучший выбор для всех целей и задач. Если у вас нет действительно веских причин для перехода на latin1 (например, совместимость с другими приложениями), сделайте это.

Существует несколько сортировок UTF-8, которые по-разному обрабатывают умлауты и порядок сортировки (см. здесь список). Возможно, вам придется выбрать один над другим в зависимости от ваших требований. Однако все они могут хранить умлауты.

person Pekka    schedule 16.12.2010