7

簡単に説明します。私の FTP 関数はファイル名の間違ったエンコーディングを返します

$conn_id = ftp_connect("site.com");
ftp_login($conn_id, "login", "pass");
ftp_pasv($conn_id, true);
$buff = ftp_nlist($conn_id, "./");
print_r($buff);

->  // result
    array() {
        [0]=> "��.txt"
    }

ファイル名は Windows-1251 エンコーディングです。

nodejs 経由で FTP に接続しようとしましたが、不気味なものも返されます — òð.txt.

ただし、私のデスクトップ クライアント (WinSCP) はこれで問題なく動作します。

PS: utf8_encode を使用しようとしましたが、それもうまくいきません。

4

4 に答える 4

9

エンコーディングがの場合は、mb_convert_encodingを使用して変更を試みることができます。以下のコードは正しい値を出力するはずです。

<?php
echo mb_convert_encoding($buff[0], "UTF-8");
//or
echo mb_convert_encoding($buff[0], "UTF-8", "windows-1251");
?>

うまくいかない場合は、次のようなものを使用して正しいエンコーディングを見つけることができます

<?php
foreach(mb_list_encodings() as $chr){
  echo mb_convert_encoding($buff[0], 'UTF-8', $chr)." : ".$chr."<br>"; 
} 
?>
于 2013-06-03T07:55:55.863 に答える
2

多くの (すべてではない) ftp サーバーは、UTF-8 パス名エンコーディングをサポートしています。この機能をオンにするには、ftp_nlist呼び出しの前に「OPTS UTF8 ON」コマンドを発行します。

ftp_raw('OPTS UTF8 ON');
于 2015-06-06T01:55:57.177 に答える
1

まず、ページにコンテンツ タイプを追加します。

header('Content-Type: text/html; charset=utf-8');

そして、これを試してください、それが役立つことを願っています

str_replace(array('%82','%94','+'),array('&#233;','&#246;',' '),urlencode($folder_name));

これは最善の方法ではありませんが、私にとってはうまくいきます。文字列を URL エンコードすると、厄介な文字がたとえば %82 に変更されます...その後、これらを HTML コードに置き換えることができます。

于 2013-06-03T08:04:12.307 に答える
0

you can try using iconv function. Hoping it will solve your problem.

于 2013-06-07T09:53:53.730 に答える