Символ евро испорчен во время передачи по FTP

Мой клиент использует очень устаревшую систему управления электронной коммерцией в моем хостинге. Для этого продукта поставщик больше не оказывает никакой поддержки.

Краткое объяснение: веб-сайт магазина, который утверждает, что работает под стеком LAMP, создан старым приложением Visual Basic Windows, работающим на MS Access. Пользователь создает магазин, определяет шаблон HTML, добавляет товары и категории и т. Д.

Затем VB exe создает страницы PHP (по одной для каждой страницы шаблона) и сценарий SQL для запуска на MySQL. Он также загружает все через FTP и запускает скрипт установки / обновления самостоятельно.

Эта проблема

Просматривая веб-сайт, описания многих продуктов сокращаются до euro знак. Например, то, что должно было быть "Цена продукта €1000", становится "Цена продукта"

Анализ

  • MySQL содержит сокращенное описание до знака €, так что это не ошибка PHP
  • Базы данных Access содержат полное описание со знаком €, поэтому веб-мастер не виноват в том, что он написал плохое описание или в eDisplay их вырезал
  • SQL, который будет запущен после загрузки сайта, сохраненный на моем локальном компьютере перед загрузкой, содержит знак €
  • Тот же сценарий, после того как eDisplay был загружен по FTP и открыт с помощью nano из SSH, показывает знак €, запутанный так:
  • Отчеты журнала vsftpd (скрытые для конфиденциальности) Sat Dec 15 11:16:57 2012 22 xxx.xxx.128.13 1112727 /srv/www/domains/xxxxxx.it/htdocs/db.sql b _ i r xxxxxxx ftp 0 * c которая выглядит как двоичная передача (а также огромная уязвимость безопасности, потому что вы можете загрузить всю базу данных из неаутентифицированного HTTP)
  • Внутренний FTP-клиент eDisplay не предоставляет опций для ascii/ бинарных режимов передачи
  • [Добавить] Попытка вручную загрузить файл SQL через SFTP показывает путаницу евро
  • [Add2] Попытка ручной загрузки с использованием клиента Xftp с явным режимом ASCII тоже не исправляет

Похоже, файл загружается в двоичном виде. Возможно, на предыдущем хосте клиента все работало нормально, потому что это был хост Windows.

Сервер

Это виртуальная машина Azure под управлением openSUSE 12.2 с обоими vsftpd а также openSSH

Вопрос

Не прося клиента загружать файлы вручную, используя FileZilla или заменяя с €, поскольку он отказывается, что я могу сделать на стороне сервера, чтобы vsftpd не испортил знак евро?

2 ответа

Решение

Частичное исправление

Установив набор символов по умолчанию MySQL, отличный от UTF-8, я могу правильно отобразить евро

Источник

#default-character-set = utf8
collation-server = latin1_general_ci
#init-connect='SET NAMES latin1_general_ci'
character-set-server = latin1

Первая строка закомментирована, потому что моя версия MySQL не распознала ее. Третья закомментирована, потому что я получаю сообщение об ошибке при каждом подключении к журналу сервера, а подключение обрезается (поэтому каждый сайт отключен).

Я говорю, что это частичное исправление, потому что я обошел загрузку по FTP и запустил SQL напрямую в phpMyAdmin с правильным знаком евро

Вы можете попробовать изменить кодировку файла SQL вместе с разделителем строк. Или ВЫ можете изменить все символы на €,

Другие вопросы по тегам