#php #mysql #character-encoding #fgetcsv
#php #mysql #кодирование символов #fgetcsv
Вопрос:
У меня есть сценарий, в котором CSV-файлы используются для хранения данных (продуктов) в базе данных MySQL. В основном шаги, которым следует клиент для поддержки продуктов, заключаются в следующем:
- Добавляет элементы в файл CSV в предопределенных столбцах
- Загружает CSV в серверную часть
- PHP-скрипт выполняет итерацию по данным CSV
- Данные проверяются / очищаются и отправляются в базу данных MySQL
То же самое применяется в обратном порядке, когда клиент редактирует, добавляет или удаляет элементы, однако это также может быть сделано прямо из серверной части. У меня были проблемы с неправильным отображением определенных символов в базе данных или в загруженной электронной таблице, поэтому мой вопрос:
Как правило, какой хороший набор кодировок или строковых функций можно применять к данным при добавлении и извлечении их в виде файла CSV? Моя кодировка подключения к MySQL — UTF-8, однако я попытался сохранить CSV-файл с набором символов UTF-8, но, похоже, Excel автоматически применяет к нему кодировку Windows-1252 по умолчанию, разрывая все символы ym UTF-8.
Приложения, подобные Open Office.org запрашивает у вас набор символов импорта, и при установке в Unicode UTF-8 он отображается нормально. Очевидно, что нельзя полагаться на то, что клиент всегда использует Excel или Open Office, так какое же хорошее решение для PC / CSV > MySQL > вернуться к работе с PC / CSV?
Все предложения приветствуются.
Саймон
Комментарии:
1. Предлагаю прочитать эту статью, чтобы начать — joelonsoftware.com/articles/Unicode.html
2. @David — Спасибо, я прочитал эту статью — она великолепна. Мне больше нравится процесс, которому нужно следовать в CSV > MySQL и обратно. Спасибо
3. Тогда я бы посоветовал взглянуть на шаблон проектирования datamapper.
4. @David — Что именно это такое и как это может мне помочь?
5. Это обобщенное решение для сопоставления данных между двумя источниками, в вашем случае CSV-файлом и базой данных. Я поднял эту статью об этом, быстрый поиск в Google поможет вам найти больше. devshed.com/c/a/PHP /…
Ответ №1:
Итак, чтобы ответить после комментариев. Хорошо разберитесь в http://www.joelonsoftware.com/articles/Unicode.html
и посмотрите на реализацию шаблона datamapper, пример статьи об этом здесь — http://www.devshed.com/c/a/PHP/Implementing-the-Data-Mapper-Design-Pattern-in-PHP-5
.
Ответ №2:
Если я правильно понимаю, вы пытаетесь открывать, редактировать и сохранять CSV-файлы с помощью Excel. Как правило, это плохая идея по целому ряду причин, включая тот факт, что она не позволяет вам указывать детали csv-файла, в который вы экспортируете.
Отказоустойчивым, но более громоздким методом может быть загрузка данных в Access вместо этого и работа с данными там. Access позволяет «экспортировать в текстовый файл», используя более продвинутые настройки, такие как кодировка и разделитель.
Комментарии:
1. это не то, что я хотел сделать, нет. Как указано в вопросе, я экспортировал данные из ряда таблиц MySQL (программно) для открытия в любом приложении для работы с электронными таблицами, таком как MS Excel, Apache Open Office и т.д. Ссылка Дэвида Гиллена очень помогла тогда (3 года назад!), и теперь у меня есть полное представление о наборах символов и о том, как их кодировать, декодировать и конвертировать. Я ценю ваш вклад, спасибо.