2017-08-09 45 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> 

希望這可以幫助別人...