Символ евро испорчен во время передачи по 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 вместе с разделителем строк. Или ВЫ можете изменить все символы на €
,