PHP — CSV в MySQL для интерфейса и обратно в CSV, лучшие практики кодирования / строковых функций?

#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 года назад!), и теперь у меня есть полное представление о наборах символов и о том, как их кодировать, декодировать и конвертировать. Я ценю ваш вклад, спасибо.