问题

问题

我的客户正在使用过时的电子商务管理系统。对于该产品,供应商不再提供任何支持。

简要说明:商店网站,即索赔在 LAMP 堆栈下运行,由在 MS Access 上运行的旧 Visual Basic Windows 应用程序构建。用户构建商店、定义 HTML 模板、添加产品和类别等。

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

问题

浏览网站时,许多产品的描述在标志前被删减euro。例如,原本应该是“产品价格 1000 欧元”,却变成了“产品价格”

分析

  • MySQL 包含一个直到 € 符号的剪切描述,因此这不是 PHP 错误
  • Access 数据库包含带有 € 符号的完整描述,因此这不是网站管理员编写错误描述或 eDisplay 剪切它们的错
  • 网站上传后运行的 SQL 包含 € 符号,该 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 _ i r xxxxxxx ftp 0 * c似乎是二进制传输(也是一个巨大的安全漏洞,因为你可以通过未经身份验证的 HTTP 下载整个数据库)
  • eDisplay 内部 FTP 客户端提供ascii/binary 传输模式选项
  • [添加] 尝试通过 SFTP 手动上传 SQL 文件时显示欧元混乱
  • [Add2] 尝试使用 Xftp 客户端以显式 ASCII 模式手动上传也无法修复

看起来文件是以二进制文件形式上传的。也许在客户之前的主机上一切正常,因为那是一台 Windows 主机。

服务器

这是运行 openSUSE 12.2 的 Azure 虚拟机,同时vsftpd包含openSSH

问题

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

答案1

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

答案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 上传,并使用正确的欧元符号直接在 phpMyAdmin 中运行了 SQL

相关内容