2017-08-09 74 views
0

我在使用西里尔文字符集检索和处理俄文数据时遇到问题。PHP中的西里尔文字符集问题(黑钻石和问号)

我使用下面的代码从FTP服务器获取文本文件中的数据,并显示每个带有问号的黑色菱形字符。

如果我通过浏览器访问FTP地址直接查看它,它会正确显示。

我试图改变这一行: 到 和 而我得到不同的结果,但没有表现出同样的浏览器直接访问文件时。

我不知道如何让代码显示一样时,我认为它直接

这将是我如何看待直接的文本文件,该文件显示正确的例子浏览器:ftp://username:[email protected]/test.txt

这是我正在使用的代码,显示黑色菱形带有问号(其他不正确的字符,取决于上述字符集)。

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
</head> 
<?php 
$username = "username"; 
$password = "password"; 
$server = "ftp://ftp.mysite.com" 
$remoteFile = "test.txt"; 
$conn = ftp_connect($server); 
if (@ftp_login($conn, $username, $password)) { 
    echo ""; 
    } 
else { 
    echo ""; 
    } 
ob_start(); 
ftp_get($conn, 'php://output', $remoteFile, FTP_ASCII); 
$data = ob_get_contents(); 
ob_end_clean(); 
ftp_close($conn); 
echo $data; 
?> 
</html> 
+0

尝试使用$ data上的utf8_encode – vishwakarma09

+0

谢谢,虽然这确实阻止了“黑钻石/问题ma rk'问题,它仍然无法正确显示。我再次对downvote感到失望(没有解释为什么),因为我只是在这里发帖时,我一直无法自己解决它。 – omega1

+0

哦,我注意到,你正在使用传输模式为FTP到ASCII,尝试切换到二进制模式与FTP_BINARY国旗代替FTP_ASCII标志 – vishwakarma09

回答

1

我设法用mb_convert_encoding来解决这个通过添加以下行:

$new_data = mb_convert_encoding($data, "utf-8", "Windows-1251"); 

与生成的代码为:

<html> 
<?php 
$username = "username"; 
$password = "password"; 
$server = "ftp://ftp.mysite.com" 
$remoteFile = "test.txt"; 
$conn = ftp_connect($server); 
if (@ftp_login($conn, $username, $password)) { 
    echo ""; 
    } 
else { 
    echo ""; 
    } 
ob_start(); 
ftp_get($conn, 'php://output', $remoteFile, FTP_ASCII); 
$data = ob_get_contents(); 
ob_end_clean(); 
ftp_close($conn); 
$new_data = mb_convert_encoding($data, "utf-8", "Windows-1251"); 
echo $data; 
?> 
</html> 

希望这可以帮助别人...