Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    problema visualizzazione caratteri accentati

    Premetto che ho fatto una ricerca nel forum ed ho provato ad applicare le soluzioni suggerite ma non riesco a venirne a capo. Sto usando un database che ho trovato qui nelle guide di html.it e lo stò usando per imparare a gestirli quindi sono alle prime armi.

    questo il problema:

    ho creato le tabelle impostando come collation utf8, idem per i vari campi, nelle pagine php prima della tag <?php ho inserito questo

    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    
    <head> 	
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     	
    <link rel="stylesheet" type="text/css" href="style.css"> 		
    <title></title> 
    
    </head> 
    
    <body>  
    <div class="content">
    
    <?php .... tutto il codice php ... ?>
    
    </div> 
    </body>
    </html>
    nel file .htaccess ho inserito questo

    codice:
     
    AddType application/x-httpd-php .css  
    
    <files *.css>   ForceType text/css </files>
    quando mi connetto a phpmyadmin seleziono lingua italiana utf8 oppure di default mi da english utf8 (provato anche con questo ma non cambia nulla)

    alla fine mi ritrovo con questi caratteri al posto dell à ed ò: à ò ed altri simobli con tutti caratteri accentati, sono errati sia nelle tabelle del database (sul server non è in locale), sia sulle pagine web, ma non visualizzo errori per le lettere accentate esterne al database che vengono visualizzate correttamente.

    La cosa più strana è che due pagine web che visualizzano i dati del db mi danno i simboli alterati mentre una li visualizza correttamente, parlo degli stessi records, nelle pagine di cancellazione e di riepilogo i dati vengono visualizzati errati mentre nella pagina di update dei dati gli stessi dati sono visualizzati correttamente.

    Com'è possibile? dove sbaglio?

    ho provato pure a modificare la connessione tramite mysql_query('set names latin1'); oppure utf8 ma cambiano solo i simboli restando sempre errati.

  2. #2
    settare la connessione funziona se nella tabella i caratteri sono memorizzati correttamente.

    l'ascii utf8 e' multibyte latin1 e' single byte. una volta memorizzato un carattere che latin1 interpreta single byte mentre in utf8 doppio byte l'errore rimane perche' nel db sara' un carattere buffo, e quando verra' letto con utf8 continuera' ad essere buffo, mentre se letto con latin1 sara' buffo leggermente differente ma sempre buffo.

    In solido se tu hai una tabella con charset latin1 non puoi semplicemente cambiare la tabella in utf8 con un alter table, ma devi fare un backup con latin1 (il file ottenuto sara' ANSI) e reinserirla come utf8.

    tieni presente che ci sono tre livelli di charset per questo caso: tabella - connessione - client

    mysql_query('set names latin1|utf8') setta soltanto la connessione e forse il client ma non credo/ricordo.

    Una volta introdotto l'errore non lo togli piu'. potresti fare il backup, metterlo su un editor e cambiare il buffo con il carattere reale con trova e sostituisci e poi reinserire i dati corretti.

    Non per nulla gli editor online tipo JCK trasformano tutto con htmlentities in caratteri monobyte buoni per tutti i charset.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Ti ringrazio per il chiarimento, stavo leggendo anche questa --> discussione che approfondisce molto la questione, stò cercando di capire quali sono i principi da adottare e gli errori da evitare creando un db, e questa della codifica vedo che è uno scoglio per molti soprattutto i novellini.

    Tornando al mio problema, devo dire che qualcosina in passato l'avevo fatta con i db, sempre piccole cose per divertirmi, ma non ho mai avuto problemi di decodifica, ora invece sembra che mi sia scoppiato tutto in faccia, immaginando quello che hai detto, che ormai i dati erano corrotti, ho cancellato e ricreato il db da zero, erano pochissimi dati, questa volta impostando tutto in utf8, compreso l'editor, eppure mi sembra che non cambi nulla, ricreerò il database facendo attenzione a quello che mi hai detto.

  4. #4
    ho cancellato la tabella e l'ho ricreata con collation utf8_general_ci, nell'head della pagina php ho impostato utf8, ho salvato le pagine con notepad++ in utf8 senza BOM... resta solo la connessione ho impostato mysql_query('set names utf8'); ed inserendo dalla pagina web i dati nel database sono archiviati correttamente ma li visualizzo nelle pagine web in maniera errata.

    se imposto mysql_query('set names latin1'); i dati sulle pagine web, anche quelli gia inseriti, si correggono e li visualizzo bene ma se inserisco altri dati inviandoli dalla mia pagina web di inserimento nel db vengono archiviati in maniera errata.

    quindi ho ho pagine visualizzate correttamente ma con dei caratteri che vengono salvati nel db in maniera errata, oppure le visualizzo male ma i dati inseriti sono corretti

    c'è poi la pagina di aggiornamento che si comporta in maniera opposta alle altre, quando le altre visualizzano le letere accentate con caratteri strani questa li visualizza correttamente, quando le altre li viualizzano bene la pagina di aggiornamento dei dati mi visualizza tutti i cratteri accentati sballati.

    Non so come uscirne

    EDITATO: ho provato a inserire nell'head della pagina la il set iso8859-1 e salvato le pagine in ANSI, le tabelle sul server sono le stesse in utf8 ma visualizzo tutto bene ma non sono convinto di quello che ho fatto e soprattutto non ho capito perhè visualizzo tutto bene, temo di aver fatto un pasticcio, inoltre mi sono comparsi dei strani simboli a piè di pagina, questi -->  , che prima non uscivano, o meglio erano usciti in precedenza mentre smanettavo ma uscivano anche in testa alla pagina ora solo sotto e non riesco a capire come eliminarli, questo mi fa temere che ciò che ho fatto è solo un pasticcio e non la via giusta da seguire.

  5. #5
    Forse il tuo problema e' solo nella visualizzazione del browser.

    Abbiamo detto prima che ci sono almeno tre livelli in cui viene gestito il character set:

    server (db, tabelle) -> connessione -> client

    Il client in questo caso sarebbe il browser. Prova a modificare la codifica caratteri del browser. Mi pare che se non forzi alcun character set con il meta nello script il browser dovrebbe fare un riconoscimento automatico. ma di html ne capisco poco.

    tra iso8859-1 e iso8859-15 la differenza sarebbe, mi pare, solo nel segno dell'euro €

    Dovresti provare le tue pagine con tutti i browser e almeno con win e linux. L'importante e' che tu sia omogeneo con i dati sul db -> connessione al db

    prova ad impostare sul browser:

    iso-8859-1
    windows-1252
    unicode utf-8

    uno dei tre dovrebbe funzionare bene, Prova poi a rifare le stesse cose togliendo il meta dallo script

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    Grazie per le ulteriori info, il browser è FF ed è impostato per visualizzare in automatico i charset, in ogni caso avevo provato a cambiarli ma non succedeva nulla.

    Ho risolto impostando tutto in iso8859-1 e latin1 e salvando le pagine con notepad++ in ANSI, credo che il problema sia sorto quando ho provato a cambiare charset senza sapere che dovevo farlo in maniera omogenea e quindi ho incasinato tutto, per fortuna ora so che occorre fare attenzione e non modificare questi parametri se non sai esattamente cosa stai facendo.

    Grazie per le informazioni mi sono state molto utili

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.