PHP中的西里尔字符集问题(Black Diamonds& question marks)

时间:2017-08-09 15:56:41

标签: php character-encoding ftp

我在使用西里尔字符集检索和处理俄语数据时遇到问题。

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

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

我尝试更改此行: 至 和 当我得到不同的结果时,没有一个显示与浏览器直接访问文件时相同。

当我直接查看时,我不确定如何让代码显示与浏览器相同

这将是我如何直接查看正确显示的文本文件的示例:ftp://username:password@ftp.mysite.com/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>

1 个答案:

答案 0 :(得分: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>

希望这有助于某人...

相关问题