欧元字符在FTP传输过程中搞砸了

我的客户在我的托pipe服务上使用了非常过时的电子商务pipe理系统。 对于该产品,供应商不再提供任何支持。

简单的解释: 宣称在LAMP堆栈下运行的商店网站是由运行在MS Access上的旧的Visual Basic Windows应用程序构build的。 用户构build商店,定义HTML模板,添加产品和类别等。

然后 ,VB EXE构buildPHP页面(每个模板页面一个)和SQL脚本在MySQL上运行。 它还通过FTP上传所有内容,并自行运行安装/升级脚本。

问题

在浏览网站时,许多产品的描述在euro符号之前被切断。 例如,“产品价格1000欧元”应该是“产品价格”

分析

  • MySQL包含一个截断的描述,直到€符号,所以它不是PHP错误
  • Access数据库包含带€符号的完整描述,所以这不是网站pipe理员写错描述或电子显示器切割它们的错误
  • 一旦网站上传,将在上传之前存储在本地机器上的SQL将包含€符号
  • 同样的脚本在被eDisplay FTP并通过SSH打开nano之后,显示出这样的欧元符号:
  • vsftpd日志报告(隐私混淆) Sat Dec 15 11:16:57 2012 22 xxx.xxx.128.13 1112727 /srv/www/domains/xxxxxx.it/htdocs/db.sql b _ ir xxxxxxx ftp 0 * c似乎是一个二进制转移(也是一个巨大的安全漏洞,因为您可以从未经身份validation的HTTP下载整个数据库)
  • eDisplay内部FTP客户端提供ascii / binary传输模式的选项
  • [添加]试图通过SFTP手动上传SQL文件显示搞砸了欧元
  • [Add2]尝试使用显式ASCII模式手动上传Xftp客户端也不能解决问题

它看起来像file upload为二进制。 也许在客户以前的主机上,它一切正常,因为这是一个Windows主机。

服务器

这是一个使用vsftpdopenSSH运行openSUSE 12.2的Azure虚拟机

这个问题

不要求客户使用FileZilla手动上传文件或用€replace € ,因为他拒绝了,我可以在服务器端做什么来防止vsftpd搞砸欧元符号?

您可以尝试更改SQL文件的编码以及行分隔符。 或者,您可以将所有符号更改为€

部分修复

通过设置MySQL的默认字符集不同于UTF-8,我可以正确显示欧元

资源

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

第一行是评论,因为我的版本的MySQL没有识别它第三个评论,因为我logging在服务器日志和连接截断每个连接(所以每个站点脱机)

我是说修复是部分的,因为我绕过FTP上传,并直接运行SQL到phpMyAdmin与正确的欧元符号