- Home
- Categorie
- Coding e Sistemistica
- MYSQL e altri Database
- Problema codifica caratteri PHP-MySql
-
Problema codifica caratteri PHP-MySql
Salve a tutti, stavo realizzando un sistema di news per un cliente polacco quando mi sono imbattutto in un problema:
il database ha codifica utf8_polish_ci e visualizza correttamente gli articoli, ma quando vado a prendere il testo per metterlo sulla mia pagina in php tutti i caratteri speciali sono sostituiti da ? e altri simboli.
Qualcuno può aiutarmi?Grazie.
-
La codifica html qual'è?
-
La codifica della pagina come pure quella del database è UTF8
-
E anche visualizzando il sorgente si vedono i punti di domanda?
-
Ciao g0tt0 e benvenuto nel Forum GT,
il problema purtroppo non è la codifica in html, ma la codifica vera e propria del file.
I file spesso hanno un BOM (Byte Order Mar) , ovvero 3 byte iniziali che ne stabiliscono la codifica.
Dovresti rimuovere l'eventuale BOM e ricodificare il file in Utf-8 che probabilmente adesso è in ANSI (codifica standard di windows).Per farlo consiglio Notepad++.
Prova a codificare i file in utf-8 senza BOM e vediamo se hai risolto il problema. (in Notepad++ lo imposti dal tab "Formato").
-
In che senso modificare i file? Non contengono testo in polacco perchè viene preso successivamente dal database.
-
Intendo i file PHP, quelli che danno l'output.
In testa ai sorgenti dei file PHP, vi sono solitamente 3 Byte(BOM) che generalmente non si vedono.
Quei 3 byte vanno rimossi e il file php va codificato in UTF-8.
Per rimuovere il BOM, vedi post precedente.Senza BOM e con codifica UTF-8 dovresti risolvere i problemi.
-
Niente da fare. Continua a mettere un ? su ogni carattere speciale anche se con phpmyadmin riesco a vedere i caratteri speciali. Altre possibili soluzioni?
-
@marcocarrieri said:
E anche visualizzando il sorgente si vedono i punti di domanda?
Si, anche il sorgente ha ? ovunque.
-
Riesci a vedere il contenuto salvato dentro il campo mysql?
-
Allora, dentro il database ho questa stringa (presa a caso):
* deformare - deformować-znikesztaącać * educazione-edukacja-nauczanie , * trasformazione - transformacja -przetwarzanie(przekształcanie,przerabianie), ```Mentre quando tento di fare un echo ottengo:
deformare - deformowa?-znikeszta?ca? * educazione-edukacja-nauczanie , * trasformazione - transformacja - przetwarzanie(przekszta?canie,przerabianie)
Spero sia chiaro il problema.
-
Ciao g0tt0,
il problema è quasi certamente il BOM e la codifica dei tuoi file php che generano l'output.Su phpmyadmin il problema non si verifica perchè i sorgenti (in php) di phpmyadmin che generano l'output sono codificati correttamente.
Se ancora non è chiaro cosa sia il Byte Order Mark (BOM), su wikipedia è spiegato bene: http://it.wikipedia.org/wiki/Byte_Order_Mark
Come ti ho già accennato sopra, per la rimozione e la corretta codifica puoi usare Notepad++.
Ciao
-
Aprendolo con notepad ++ e andando su "Formato" mi dice che è già UTF-8 senza bom.
Per sicurezza ho fatto converti in UTF-8 senza bom ma il problema persiste.
Ho "smanettato" un po con notepad++ ma non cambia nulla .
-
Anche tutti i file che vengono richiamati (include e require) sono in UTF-8 senza bom?
-
Si.
Può essere un problema della echo()?
C'è un output "grezzo" in php che mi faccia vedere il contenuto della stringa?
-
Si, var_dump($variabile)
Altra prova, a questo punto le proviamo tutte:
usa
[PHP] echo utf8_encode($stringa);[/PHP]se non va prova anche [PHP]echo utf8_decode( $stringa );[/PHP].
-
Anche con utf8_decode e utf8_encode l'output non cambia, però facendo un po di tentativi ho visto che cambiando il tipo di dato (su mysql) da TEXT a BLOB qualcosa migliora, si vedono molti caratteri ma non tutti.
-
Ok risolto cambiando su mysql il tipo di dato da TEXT A BLOB.
Grazie dell'aiuto comunque.