PHP - FTP文件名编码问题

时间:2013-05-26 13:03:52

标签: php encoding ftp

我会简短。我的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 个答案:

答案 0 :(得分: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>"; 
} 
?>

答案 1 :(得分:1)

首先在页面上添加内容类型。

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

然后尝试这个,希望有所帮助

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

这不是最好的方法,但它适用于我,如果你对网址进行编码,它会将尴尬的字符更改为例如%82 ...然后,您可以使用HTML代码替换它们。

答案 2 :(得分:1)

许多(但不是全部)ftp服务器支持UTF-8路径名编码。您可以在 <?php $perpage = 6; $page = (int)$_GET['page']; if(!($page>0)) $page = 1; $offset = ($page-1)*$perpage; $parm=$_GET['dir']; $extensions = array('3gp', 'mp4', 'png', 'gif', 'bmp'); $files = glob('files/'.$parm.'/*'.'{'.implode(',', $extensions).'}', GLOB_BRACE); $files = array_combine(array_map("filemtime", $files), $files); krsort($files); $total_files = sizeof($files); $total_pages = ceil($total_files/$perpage); $files = array_slice($files, $offset, $perpage); ?> 呼叫之前发出'OPTS UTF8 ON'命令来启用此功能。

ftp_nlist

答案 3 :(得分:0)

您可以尝试使用iconv功能。希望它能解决你的问题。