2017-08-09 18 views
0

キリル文字セットを使用してロシア語でデータを取得し処理する際に問題が発生しています。PHPでキリル文字セットに関する問題(ブラックダイヤモンドと疑問符)

以下のコードを使用してFTPサーバーからテキストファイルにデータを取得し、黒い菱形の中に疑問符を含むすべての文字を表示します。

ブラウザでFTPアドレスにアクセスして直接表示すると、正しく表示されます。

私はこのラインに変化しようとしている: へ と を、私は異なる結果を得る一方で、どれもブラウザから直接ファイルにアクセスするときと同じように表示されません。

私は直接それを表示したとき、私はこれは私が正しく表示される直接テキストファイルを表示する方法の一例だろう

ブラウザと同じように表示するためのコードを取得するかどうかはわかりません:ftp://username:[email protected]/test.txt

これは黒い菱形に疑問符(上記の文字セットに応じて他の間違った文字が表示されます)を表示するコードです。

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
</head> 
<?php 
$username = "username"; 
$password = "password"; 
$server = "ftp://ftp.mysite.com" 
$remoteFile = "test.txt"; 
$conn = ftp_connect($server); 
if (@ftp_login($conn, $username, $password)) { 
    echo ""; 
    } 
else { 
    echo ""; 
    } 
ob_start(); 
ftp_get($conn, 'php://output', $remoteFile, FTP_ASCII); 
$data = ob_get_contents(); 
ob_end_clean(); 
ftp_close($conn); 
echo $data; 
?> 
</html> 
+0

$ dataにutf8_encodeを試してください – vishwakarma09

+0

ありがとうございます。これは本当に「ブラックダイヤモンド/質問ma rk 'の問題は、まだ正しく表示されません。私は自分自身でそれを解決することができなかったときに私がここに掲示するので、(なぜ説明なしで)downvoteに再び失望した。 – omega1

+0

ああ、あなたはFTPにASCIIの転送モードを使用しています。FTP_ASCIIフラグの代わりにFTP_BINARYフラグでバイナリモードに切り替えてみてください。 – vishwakarma09

答えて

1

私は次の行を追加してmb_convert_encodingを使用してこれを解決するために管理:

...これが誰かを助け

<html> 
<?php 
$username = "username"; 
$password = "password"; 
$server = "ftp://ftp.mysite.com" 
$remoteFile = "test.txt"; 
$conn = ftp_connect($server); 
if (@ftp_login($conn, $username, $password)) { 
    echo ""; 
    } 
else { 
    echo ""; 
    } 
ob_start(); 
ftp_get($conn, 'php://output', $remoteFile, FTP_ASCII); 
$data = ob_get_contents(); 
ob_end_clean(); 
ftp_close($conn); 
$new_data = mb_convert_encoding($data, "utf-8", "Windows-1251"); 
echo $data; 
?> 
</html> 

希望:結果として得られたコードで

$new_data = mb_convert_encoding($data, "utf-8", "Windows-1251");