FTP 传输期间字符映射损坏

FTP 传输期间字符映射损坏

我最近迁移了一个运行旧 PHP 商店的 Web 服务器,运行起来有点棘手:让我先解释一下。如果您想在 thedailywtf 或 codinghorror 上发布此内容,欢迎您。

店主在自己的机器上运行一个 exe 来更新产品。该程序生成(来自 MDB Access 数据库)自己的 PHP 文件,并最终将它们连同特殊文件updatedb.php和一个db.sql文件(可从 公开访问wwwroot)一起上传到目标服务器。然后,exe 文件调用一个带有安全参数的POSTto updatedb.sql,以防止外国人调用 PHP 脚本(我不会解释哪个公共文本文件的第一行包含密码)。

那么 PHP 会做什么呢?只需清除数据库并重新插入所有数据,即使实际的商店页面不从 MySQL 加载其数据,但每个生成的 PHP 文件都包含静态描述和图像链接。updatedb.php从文件加载数据db.sql并在新的 SQL 连接中运行每一行。

配置差异

新旧服务器均运行Apache 2vsftpd。我发现两者的语言环境不同:旧服务器使用ISO-8859-15charmap ,而新服务器UTF-8vsftpd配置完全相同

字符集问题

我发现大多数非 ASCII 符号(例如uro°和重音字母àèéìòù)都被搞乱了,所以它们无法在 SQL 语句中运行(您可能猜到没有进行转义,我可以证实这一点!)

问题

由于客户不想破坏他们的商店,迫使我为他们的 vhost 添加几个特殊的 PHP 配置指令,我该如何修复通过 FTP 传输的文件的字符编码?

我考虑过配置vsftpd.conf来源

# Enable character convertion. Supported UTF-8 (Russian chars) = UTF8,
# Win-1251 = WIN1251 or 1251, Koi8-r = KOI8R or 878, IBM 866 = DOS or 866.
convert_charset_enable=1
# Define charset local
local_charset=UTF8
# Define default charset on remote host
remote_charset=ISO-8859-15

但强制将远程字符集设置为 iso-8859-15 似乎不太好。幸运的是,这是唯一一个使用 Windows XP FTP 传输的客户。

[更新] 我刚刚发现了我的老问题FTP 传输期间欧元字符混乱关于类似的问题。在那种情况下,SQL 字符串被从 € 符号中截断。现在,查询被执行时带有混乱的 € 符号。

相关内容