【问题标题】:PHP file downloading through ftp, how to do this with utf8 in mind?PHP文件通过ftp下载,如何使用utf8做到这一点?
【发布时间】:2011-07-27 20:55:44
【问题描述】:

在外部 FTP 服务器上有一个带有 utf8 编码(如果我是正确的)的 .TXT 文件。我想通过一个 php 脚本把它下载到我自己的 ftp 服务器上。 所以我写了一个脚本,但是当我查看 .txt 时,我看到字符应该是 é 看起来像 ën。 我怎样才能正确地做到这一点? (另外,如果我再次运行相同的脚本,我希望 用新文件替换旧文件)。这是我的代码:

<?php
// connecting with ftp server
$connection_id = ftp_connect('ftp.example.com'); 
// login with username and password
$login = ftp_login($connection_id, 'username', 'password'); 

// check connection
if ((!$connection_id) || (!$login)) {
   echo 'FTP connection has failed.';
   exit();
} else {
   echo 'Connection succeeded.';
}

$local_file = 'home/file.TXT'; 
$server_file = '/file.TXT';

// open file
$handle = fopen($local_file, 'w+');

// try to download txt file and save it locally
if(ftp_fget($connection_id, $handle, $server_file, FTP_BINARY, 0)) {
     echo 'Succesfully written to '.$local_file;
} else {
    echo 'Not succesfully downloaded!';
}

// close file handler
 fclose($handle);

//close the connection
ftp_close($connection_id);
?>

顺便说一句,有人知道如何通过按空格四次不缩进每一行来简化在 stackoverflow 上显示代码的工作吗?

【问题讨论】:

标签: php utf-8 ftp fopen


【解决方案1】:

您正在使用二进制传输,因此它按原样从服务器下载它。如果下载后文件不正确,则在服务器上。

【讨论】:

  • 二进制传输与此无关。旧的(甚至不再适用)二进制与文本模式仅影响行尾。 UTF-8 以任何可能的方式都是“二进制安全的”。
  • 谢谢,我不知道 lineendings 是唯一受模式影响的想法。
【解决方案2】:

PHP 代码可能没问题;它不关心文件的编码是什么,它只是通过 FTP 复制原始文件数据。

更可能的问题是您的 TXT 文件阅读器无法处理 UTF-8 编码。您是否检查过您的文本文件阅读器可以在其他文件中显示 UTF-8 字符?

【讨论】:

    【解决方案3】:

    Bynary ftp 传输不涉及文本文件的字符编码。它在位级别复制。它不关心它传输什么样的数据。

    您是否尝试在文本查看器/编辑器中同时打开本地和服务器文件? 如果它们看起来相同,这可能只意味着两件事: 1.服务器上的文件不是UTF-8,这意味着副本也不是。 2. 您的编辑器/查看器不支持 UTF-8(或者它不知道文本应该显示为 UTF-8)。

    【讨论】:

    • 服务器上的文件是utf-8,不知道是不是真的,但是服务器管理员告诉我的。我猜 Firefox 可以显示 utf-8?
    • 可以,但请确保它将文件解释为 utf8(查看菜单 - 字符编码)。
    猜你喜欢
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    相关资源
    最近更新 更多