2011-07-27 8 views
3

外部FTPサーバーにutf8エンコーディング(正しい場合)を持つ.TXTファイルがあります。私は自分のftpサーバにPHPスクリプトを通してこれをダウンロードしたい。 私はスクリプトを書いたが、.txtを見ると、é«nのように見える文字が表示されている。 これはどうすれば正しいのですか? (また、同じスクリプトを再実行すると、の古いファイルが新しく新しいファイルに置き換えられます)。これは私のコードです:PHPを使ってftpをダウンロードする方法、utf8を念頭に置いてこれを行う方法は?

<?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); 
?> 

ところで、anbodyは4倍のためのスペースを押して、すべての単一の行をインデントしないことにより、StackOverflowの上でコードを表示するための生活を楽にする方法を知っていますか?

+0

'$ local_file'または' $ localfile'ですか?とにかく、FTP転送はファイルの内容には無関係ですが、ファイルにあるものはすべて取得します。ファイルがUTF-8でエンコードされているようですので、そのように扱いましょう。 –

+0

ファイルをダウンロードした後、どのように見ていますか?ローカルエディタ?ウェブブラウザ? – Marco

+0

私はそれをローカルのエディタとFirefoxで見る。 @Kerrek SB、それに気づいたthnx! – Orhan

答えて

0

バイナリftp転送は、テキストファイルの文字エンコーディングには触れません。これはビットレベルでコピーされます。どのような種類のデータを転送するかは気にしません。

テキストビューア/エディタでローカルファイルとサーバファイルの両方を開こうとしましたか? 同じように見える場合、これは2つのことだけを意味する可能性があります。 1.ファイルはサーバー上でUTF-8ではないため、コピーも作成されません。 2.エディタ/ビューアはUTF-8をサポートしていません(または、テキストがUTF-8として表示されることを知らない)。

+0

ファイルはサーバー上のutf-8ですが、実際にはどうなっているかわかりませんが、サーバー管理者から教えてくれました。 Firefoxはutf-8を表示できますか? – Orhan

+0

それは可能ですが、ファイルをutf8(表示メニュー - 文字エンコーディング)として解釈することを確認してください。 – Maerlyn

+0

Firefoxはutf-8として表示していませんでした。皆さん大丈夫でした! – Orhan

1

バイナリ転送を使用しているので、そのままサーバーからダウンロードしています。ダウンロード後にファイルが正しくない場合は、サーバー上にあります。

+1

バイナリ転送はそれとは関係ありません。バイナリ対テキストモードは、行末にのみ影響します。 UTF-8は、考えられる方法では「バイナリセーフ」です。 –

+0

ありがとう、私はlineendingsがモードによって影響を受ける唯一の考えであるか分からなかった。 – Maerlyn

1

PHPコードはおそらく問題ありません。ファイルがどのエンコーディングに入っているか気にしません。FTPを介して生のファイルデータをコピーするだけです。

TXTファイルリーダーがUTF-8エンコーディングを処理しない可能性がより高い問題です。テキストファイルリーダーが他のファイルにUTF-8文字を表示できることを確認しましたか?

関連する問題