PHP - FTP 文件名编码问题

标签 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 - 但这对我也不起作用。

最佳答案

如果编码是您可以尝试使用 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>"; 
} 
?>

关于PHP - FTP 文件名编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16759507/

相关文章:

javascript - 全日历 : trouble rendering events with ajax when pressing 'prev' or 'next'

c# - UTF8/UTF16和Base64在编码方面有什么区别

Python:从ftp写入文件,不换行

java - FTPClient.storeFile() 上传缓慢然后不起作用

java - 通过 Java 将大文件传输到远程服务器的最可靠方法?

php - Laravel/Eloquent WHERE NOT SUBQUERY

php - 我想扩展一个 SQL 查询来获取它正在选择的 ID 的名称。我怎么做?

php - 通过 mySQL DB 迭代并将字符串转换为不同的编码

mysql - 使用 MyBatis 读取 MySQL 中的 latin1_swedish_ci 文本

java - 使用资源包从属性文件中读取日语字符