Dans MySQL, j'ai défini mon type de champ de données sur utf8_bin
Et je stocke des données en Unicode. Les textes sont correctement affichés dans les pages Web.
Je veux générer un fichier Excel en exportant des données de ma table vers celui-ci. La sortie dans .xls
Et .cvs
Est - '????'.
Je vérifie d'autres réponses ici, il a été fait référence à des en-têtes:
header("content-type:application/csv;charset=UTF-8");
question similaire . Mais ça ne marche pas. Après avoir utilisé l'en-tête, la sortie csv est - à¤¸à ¥ ‚ठ° à ¥ या.
Veuillez aider. Merci.
Ce message a résolu mon problème: https://stackoverflow.com/a/4762708/2349494
Et c'est ce qu'a fait la conversion:
print chr(255) . chr(254) . mb_convert_encoding($csv_output, 'UTF-16LE', 'UTF-8');
Auparavant, je recevais des caractères poubelles maintenant les données correctes sont exportées.
J'ai eu le même problème et je l'ai fait en combinant deux choses:
Tout d'abord, vous devez changer le classement des tables en UTF8, par exemple: "utf8_general_ci" (ou assurez-vous simplement de cela), puis ajoutez ce code après votre requête MySQL:
mysql_query("SET NAMES utf8");
Comme
$result = mysql_query("SHOW COLUMNS FROM table WHERE Field NOT IN ('user_id', 'password')");
mysql_query("SET NAMES utf8");
Et puis, utilisez ceci comme en-tête (adaptez-vous à vos besoins):
header('Content-Description: File Transfer');
header("Content-type: application/vnd.ms-Excel");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header("Content-disposition: filename=".$filename.".csv");
header('Content-Transfer-Encoding: binary');
header('Pragma: public');
print "\xEF\xBB\xBF"; // UTF-8 BOM
print $csv_output;
exit;
J'ai une variante de la réponse de Sajal et je l'ai trouvée sur php.net à: http://www.php.net/manual/en/function.iconv.php#104287
Faites écho au début du contenu du csv:
chr(255).chr(254).iconv("UTF-8", "UTF-16LE//IGNORE", $data)
Je préfère avec iconv()
mais il semble que cela fasse la même chose que mb_convert_encoding()
. N'oubliez pas de remplacer ;
Par des tabulations (\t
) Et cela a bien fonctionné pour moi comme ça!
Essayez le code suivant;
ob_end_clean();
$_filename = date('Y_m_d_H_i').".csv";
header("Cache-Control: public");
header("Content-Type: application/octet-stream");
header("Content-Type: text/csv; charset=utf-8");
header("Content-Disposition: attachment; filename=$_filename");
// Read the file from disk
readfile($filename);
exit();
l'exporter au format XLS (format xml) avec prise en charge unicode, vient d'être testé et fonctionne à 100%