Visualizzazione dei risultati da 1 a 3 su 3

Discussione: export in xls: charset

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    525

    export in xls: charset

    Esportazione in formato xls dei dati memorizzati in un db mysql:

    header ("Content-Type: application/vnd.ms-excel; charset: utf-8");

    header ("Content-Disposition: inline; filename=$name_file_xls");

    header("Expires: 0");

    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

    header("Pragma: private");

    Il file esportato contiene un'errata codifica dei caratteri accentati... se forzo il charset, perchè accade?

  2. #2
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Forse i dati nel DB non sono memorizzati in UTF8 (la collation per tabelle e database).
    Forse la comunicazione fra DB e PHP non avviene in UTF8 (set names).
    Se dei caratteri sono hard coded nei tuoi file php forse i file php non sono stati salvati con codifica UTF8
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    525
    La collation delle tabelle è utf-8
    Ho forzato la connessione ma senza successo, anzi visualizzava ulteriori simboli:
    mysql_query("set names 'utf8'");
    mysql_query("SET CHARACTER SET utf8");

    il charset della pagine è utf-8

    Tramite questa funzione ho verificato il tipo di dato :
    function is_utf8($s)
    {
    for ($i=0; $i<strlen($s); $i++) {
    if (ord($s[$i]) < 0x80) continue; # 0bbbbbbb
    elseif ((ord($s[$i]) & 0xE0) == 0xC0) $n=1; # 110bbbbb
    elseif ((ord($s[$i]) & 0xF0) == 0xE0) $n=2; # 1110bbbb
    elseif ((ord($s[$i]) & 0xF8) == 0xF0) $n=3; # 11110bbb
    elseif ((ord($s[$i]) & 0xFC) == 0xF8) $n=4; # 111110bb
    elseif ((ord($s[$i]) & 0xFE) == 0xFC) $n=5; # 1111110b
    else return false; # Does not match any model
    for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ?
    if ((++$i == strlen($s)) || ((ord($s[$i]) & 0xC0) != 0x80))
    return false;
    }
    }
    return true;
    }


    Ho risolto semplicemente così:

    $label=htmlentities($label, ENT_NOQUOTES, 'UTF-8');

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.