我会简短。我的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 - 但这也不适合我。
答案 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('é','ö',' '),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功能。希望它能解决你的问题。