Visualizzazione risultati 1 fino 15 di 15

Discussione: Codifica caratteri e htmlentities()

  1. #1
    Guest

    Predefinito Codifica caratteri e htmlentities()

    Salve a tutti!
    nel mio sito utilizzo la funzione htmlentities() per elimitare i caratteri speciali html dai testi degli articoli e dei commenti.
    Il problema è che per questione di comatibilità utilizzo la codifica UTF-8 ma con questa lettere come "è" invece che essere tradotte con un "è" vengono tradotte con un "è" che chiaramente HTML renderà non come "è" ma come "è".
    Cambia la codifica con una codifica ISO il problema scompare... c'è modo di mantenere UTF-8 ed avere una codifica corretta con htmlentities() ?

    grazie ciao

    EDIT: Ho contrallato, facendo una ricerca sul forum (in ritardo e mi scuso)... ma non mi sembra che il problema sia stato risolto in maniera definitiva in passato... piuttosto solo aggirato...
    Ultima modifica di opens : 02-07-2010 alle ore 02.42.38

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Il problema è che usi UTF-8 sul sito, ma gli dai in pasto roba scritta in ISO. Ricorda che c'è la codifica delle pagine, la codifica dei file delle pagine, e la codifica dei file e db che le pagine leggono. Tutte e tre devono essere identiche.

  3. #3
    Guest

    Predefinito

    Se il problema è la conversione del testo puoi usare queste due funzioni:
    utf8_encode e utf8_decode
    Fallo quello che chiedi tu ISO -> UTF8 e viceversa!

  4. #4
    Guest

    Predefinito

    Il testo è passato da un form in una pagina del sito ( che in teoria dovrebbe essere in UTF8 ), passato nella htmlentities e nella adslashes (in quest'ordine), e i caratteri "strani" non solo vengono stampati a video ma caricati nel database (codificati nelle rispettive entità html).
    boh. Usare il code e decode sarebbe un lavoro immane... l'unica cosa potrebbe essere invece di usare htmlentities(), usare htmlspecialchars() e codificare i carattere speciali con una funzione caso per caso che utilizza la funzione replace sulle stringhe di php...

  5. #5
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Andiamo per ordine: pagine del sito, perché leggo questo nella home? Non era UTF-8?
    Codice HTML:
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-15" />

  6. #6
    Guest

    Predefinito

    l'ho messa ieri per vedere qual'era il problema (che in effetti così scompare). nei giorni addietro (quando ho provato ad inserire il post) era in utf-8...
    Ultima modifica di opens : 02-07-2010 alle ore 13.44.39

  7. #7
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Ed hai anche cambiato la codifica vera e propria delle pagine, oppure hai solo cambiato quella riga?

  8. #8
    Guest

    Predefinito

    solo quella riga...

  9. #9
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Allora ecco il problema: hai creato le tue pagine con un editor che le ha salvate in ISO-8859-1, poi tu hai deciso di marcarle come UTF-8 usando il meta tag.

    Se non vuoi problemi, il meta tag deve dire al browser quale codifica è usata nella pagina - non quale codifica vorresti usare, ma proprio quella del file .php. Se vuoi usare UTF-8, converti i tuoi file in UTF-8 usando un editor di testo sensato, oppure qualche programma che lo faccia per tutti in blocco.

    Quando i tuoi file sono UTF-8, allora puoi settare il meta tag a UTF-8.

  10. #10
    Guest

    Predefinito

    Come editor ho usato direttamente l'editor testuale che mette a disposizione altervista... che codifica utilizza quello?

  11. #11
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Evidentemente ISO-8859-1.

    Come regola, ricordati che se ci sono troppe "Ã" in giro, vuol dire che del testo UTF-8 è stato forzato ISO-8859-1, di solito per colpa di un meta tag. La tua pagina affermava di essere UTF-8, quindi il browser gli ha spedito i dati del form in UTF-8, ma poi sono stati scritti ed elaborati in una pagina che era in realtà ISO-8859-1.

    Se invece fai il contrario, forzando dell'ISO ad apparire come UTF-8, ti ritrovi in giro quadratini strani ed ideogrammi cinesi.
    Ultima modifica di dreadnaut : 02-07-2010 alle ore 14.40.36 Motivo: fixino alla spiegazione

  12. #12
    Guest

    Predefinito

    ok, ti ringrazio per l'aiuto, ne terrò di conto.

    ciao

  13. #13
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Whops, ovviamente avevo scritto la regola al contrario. Ho corretto sopra ora - rileggila

  14. #14
    Guest

    Thumbs up

    Guarda è molto semplice risolvere il tuo problema.
    Devi usare htmlentities specificando il charset
    htmlentities(.........) diventa htmlentities(........, ENT_COMPAT, 'UTF-8')
    altrimenti ti mostra i 2 byte che definiscono il carattere in UTF
    Roger

  15. #15
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Cioè invece di cambiare una riga una volta, cambiamo tutte le lettere ogni volta che visualizziamo la pagina?

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •