2017-08-09 1 views
0

Je rencontre des problèmes avec la récupération et le traitement des données en russe à l'aide du jeu de caractères cyrillique.Problèmes avec le jeu de caractères cyrilliques en PHP (Black Diamonds & points d'interrogation)

Je reçois les données dans un fichier texte à partir d'un serveur FTP avec le code ci-dessous et il affiche tous les caractères avec les diamants noirs avec des points d'interrogation à l'intérieur.

Si je l'affiche directement en accédant à l'adresse FTP avec le navigateur, il s'affiche correctement.

J'ai essayé de changer cette ligne: à et et pendant que j'obtenir des résultats différents, ne montrent la même chose que lors de l'accès au fichier directement par le navigateur.

Je ne suis pas sûr de savoir comment obtenir le code pour afficher le même que le navigateur lorsque je l'ai vue directement

Ce serait un exemple de la façon dont je considère le fichier texte directement qui affiche correctement: ftp://username:[email protected]/test.txt

C'est le code que j'utilise qui affiche les losanges noirs avec des points d'interrogation (autres caractères incorrects, selon le jeu de caractères mentionné ci-dessus).

<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

Essayez utf8_encode sur $ data – vishwakarma09

+0

Merci, alors que cela arrête en effet le 'diamant noir/question ma rk ', il ne s'affiche toujours pas correctement. Je suis à nouveau déçu de la downvote (sans explication pourquoi) car je poste seulement ici quand j'ai été incapable de le résoudre moi-même. – omega1

+0

oh j'ai remarqué, vous utilisez le mode de transfert pour ftp en ASCII, essayez de passer en mode binaire avec le drapeau FTP_BINARY à la place du drapeau FTP_ASCII – vishwakarma09

Répondre

1

j'ai réussi à résoudre ce problème en utilisant mb_convert_encoding en ajoutant la ligne suivante:

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

avec le code résultant comme:

<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> 

Hope this helps quelqu'un ...