Как получить данные utf-8 с помощью php и показать правильную кодировку в дампе базы данных excelsheet? - PullRequest
4 голосов
/ 17 декабря 2010

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

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

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

ОБНОВЛЕНИЕ

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

UPDATE 1

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

UPDATE 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 ... завтра: -)

Ответы [ 4 ]

2 голосов
/ 17 декабря 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

1 голос
/ 17 декабря 2010

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

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

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

0 голосов
/ 17 декабря 2010

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

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

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

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

0 голосов
/ 17 декабря 2010

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

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

...