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 路径名编码。您可以通过在调用前发出“OPTS UTF8 ON”命令来打开此功能ftp_nlist

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 回答