Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

[MySQL+PHP] Lettere accentate rimpiazzate dal simbolo "?"

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

[MySQL+PHP] Lettere accentate rimpiazzate dal simbolo "?"

Messaggioda M@ttia » mar giu 15, 2010 1:37 pm

Sto attualmente scrivendo un'applicazione web in PHP che, fra le varie cose, va anche a leggere delle stringhe di testo in un database MySQL per poi stamparle a schermo col classico comando echo. Tuttavia non riesco a leggere correttamente delle stringhe di testo che contengono dei caratteri accentati quali à è oppure lettere tedesche come ü, ö, ...

Dal punto di vista della pagina web (in XHTML 1.0 Strict), la dichiarazione del charset è:
Codice: Seleziona tutto
<meta http-equiv= "Content-Type"  content= "text/html;  charset=iso-8859-1" />

e se vado a scrivere "già" direttamente nel <body> nel codice html viene visualizzato correttamente.

Dal punto di vista del database MySQL, la stringa la estrapolo da una tabella, dalla colonna "TextMessage" che è dichiarata come latin1_german1_ci (ma anche come utf8_unicode_ci o altri dopo non funziona), e se vado ad aprire il database MySQL online con PhpMyAdmin, quando visualizzo il contenuto della tabella la stringa è visualizzata correttamente con le "à"!!!

Quando però nella mia pagina eseguo una query del tipo
Codice: Seleziona tutto
$query = "SELECT TextMessage FROM MiaTabella;
...
echo $Stringa;

tutte le stringhe che contengono lettere accentate, ecc. vengono rimpiazzate dal solito generico simbolo "?". Non riesco proprio a venirne a capo, in quanto scrivendo direttamente della pagina funziona, leggendo il contenuto del database da PhpmyAdmin funziona, ma leggendole da php no: qualcuno può aiutarmi a risolvere il dilemma??? [XX(]
</IE><FIREFOX>
Avatar utente
M@ttia
Moderatore
Moderatore
 
Messaggi: 8363
Iscritto il: lun giu 09, 2003 2:18 pm
Località: Ticino - Estero

Re: [MySQL+PHP] Lettere accentate rimpiazzate dal simbolo "?

Messaggioda ste_95 » mar giu 15, 2010 2:04 pm

«A volte è meglio tacere e sembrare stupidi che aprir bocca e togliere ogni dubbio.» Oscar Wilde
Avatar utente
ste_95
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 17271
Iscritto il: lun ago 06, 2007 11:19 am

Re: [MySQL+PHP] Lettere accentate rimpiazzate dal simbolo "?

Messaggioda M@ttia » mar giu 15, 2010 2:22 pm

Uhm, ti ringrazio!
Dei due, hmtlentities è quello mi risolve il problema, ma me ne crea un altro. [:)] La mia stringa è del tipo "Oggi <i>abbiamo</i> già visto che...", ovvero contiene anche semplice codice html per il grassetto, corsivo o sottolineato, e questo così facendo non viene più interpretato come html, ma appunto stampato a schermo come <i> (poiché le < > sono rimpiazzate dal codice html). Potrei ev. risolvere inventandomi un tag per il corsivo e poi facendo sostituire a php con strreplace dopo hmtlentities, ma se ti viene in mente qualcosa di meno grezzo... [^]


Edit:
Come non detto: esiste la funzione htmlspecialchars che si occupa solo dei simboli html < > % ' ", quindi il risultato da me voluto lo ottengo tramite:

Codice: Seleziona tutto
htmlspecialchars_decode(htmlentities($Stringa]));


Un po' machiavellico ma funziona! Grazie per l'aiuto [^]
</IE><FIREFOX>
Avatar utente
M@ttia
Moderatore
Moderatore
 
Messaggi: 8363
Iscritto il: lun giu 09, 2003 2:18 pm
Località: Ticino - Estero


Re: [MySQL+PHP] Lettere accentate rimpiazzate dal simbolo "?

Messaggioda ste_95 » mar giu 15, 2010 2:32 pm

Figurati!

[ciao]
«A volte è meglio tacere e sembrare stupidi che aprir bocca e togliere ogni dubbio.» Oscar Wilde
Avatar utente
ste_95
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 17271
Iscritto il: lun ago 06, 2007 11:19 am

Re: [MySQL+PHP] Lettere accentate rimpiazzate dal simbolo "?

Messaggioda Zane » mer giu 30, 2010 9:58 am

Sono impazzito (e, tutt'ora, impazzisco quotidianamente!) anch'io dietro a questo maledetto problema. La soluzione che ti consiglio è:

1) Usare le accentate normali

2) Usare campi utf8_bin nel DB

3) Cambiare il charset HTML in
Codice: Seleziona tutto
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


Attento soltanto che dopo devi farti una scorpacciata di articoli come questo... ma in questo modo, si dovrebbe risolvere tutto al meglio (ed è anche il modo più efficace per scrivere il nome della sede principale di Sharp usando i caratteri giusti) yyy
Avatar utente
Zane
MLI Hero
MLI Hero
 
Messaggi: 7935
Iscritto il: lun ago 05, 2002 9:36 am
Località: Ferrara

Re: [MySQL+PHP] Lettere accentate rimpiazzate dal simbolo "?

Messaggioda ste_95 » mer giu 30, 2010 10:34 am

Sto tribolando anch'io di recente con questo problema... ho un file che chiama un metodo di una classe che estrae dei dati dal database e ne crea un array.
Problemi:
- se faccio l'htmlentities dalla classe di ogni indice, nella chiamata al metodo tornano caratteri strani, mentre se mi faccio stampare la stringa htmlentities-zzata dal metodo tutto si vede bene.
- devo fare l'htmlentities dal file e non dalla classe, che è un po' scomodo.
«A volte è meglio tacere e sembrare stupidi che aprir bocca e togliere ogni dubbio.» Oscar Wilde
Avatar utente
ste_95
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 17271
Iscritto il: lun ago 06, 2007 11:19 am

Re: [MySQL+PHP] Lettere accentate rimpiazzate dal simbolo "?

Messaggioda Zane » mer giu 30, 2010 12:35 pm

Se hai seguito le mie tre indicazioni precedenti, prova a fare la chiamata come htmlentities($tua_stringa, ENT_COMPAT, 'UTF-8'). Ad ogni modo: seguendo l'approccio che ho indicato, l'entitaggio non dovrebbe più servire.
Avatar utente
Zane
MLI Hero
MLI Hero
 
Messaggi: 7935
Iscritto il: lun ago 05, 2002 9:36 am
Località: Ferrara

Re: [MySQL+PHP] Lettere accentate rimpiazzate dal simbolo "?

Messaggioda Andy94 » mer giu 30, 2010 12:58 pm

In effetti io faccio sempre come dici tu... Codifico in UTF8, tengo i campi in utf8_general_ci e non htmlentitizzo nulla... Entra ed esce regolarmente.
Avatar utente
Andy94
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 9998
Iscritto il: lun apr 09, 2007 8:39 pm

Re: [MySQL+PHP] Lettere accentate rimpiazzate dal simbolo "?

Messaggioda eDog » mer giu 30, 2010 1:15 pm

Si, anch'io andavo di utf-8 come codifica di pagina e db..

Quanto mi manca programmare in PHP.. [cry] Dopo due anni di Java.. ora spero proprio di non dover imparare l'ASP a scuola.. [acc2]
eDog,
"È meglio essere temuti o rispettati? Io dico: è troppo chiedere entrambe le cose?" - Tony Stark
Avatar utente
eDog
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 3679
Iscritto il: sab dic 30, 2006 7:58 pm
Località: Vescovana (Padova)

Re: [MySQL+PHP] Lettere accentate rimpiazzate dal simbolo "?

Messaggioda ste_95 » mer giu 30, 2010 2:31 pm

Zane ha scritto:Ad ogni modo: seguendo l'approccio che ho indicato, l'entitaggio non dovrebbe più servire.

È vero! Grazie! [:)]
«A volte è meglio tacere e sembrare stupidi che aprir bocca e togliere ogni dubbio.» Oscar Wilde
Avatar utente
ste_95
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 17271
Iscritto il: lun ago 06, 2007 11:19 am

Re: [MySQL+PHP] Lettere accentate rimpiazzate dal simbolo "?

Messaggioda straus » dom apr 13, 2014 6:14 pm

Ragazzi, sono nuovo. Sono capitato per caso in questo argomento facendo una ricerca, ho proprio il problema in questione.

Per visualizzare correttamente in MySql i caratteri accentati, li inserisco Octal es: \350 che equivale a è e nel db si scrivono giusti. Il problema si presenta quando poi li estraggo e li stampo a video e appare il classico punto di domanda.
Nel db ho la codifica latin1_swedish_ci ho provato a sostituire con utf8_bin ma è peggio, nel db si stampano caratteri numerici.

Questo è il codice, la stringa in questione è ".$link['pagina']."

Codice: Seleziona tutto
//Estrae i dati dal DB e crea la sequenza delle pagine più viste 
function piu_visitate($n) {
$mysqli = new mysqli("localhost", "root", "pwd", "gruppoalveo"); 
   $pag_viste = $mysqli->query("SELECT * FROM visitate ORDER BY visite DESC LIMIT 0,$n");
  if ($pag_viste->num_rows > 0) {
    echo "<ol class=\"formol\"'piu_visitate'>";
    while ($link = $pag_viste->fetch_array(MYSQLI_ASSOC)) { 
    echo "<div style=\"margin-bottom:-10px; font-family:verdana; font-size:9px; color:#b3b3b3;\">".$link["visite"]." volte</div>"; 
    echo "<li><a class=\"visti\" href='".$link['url']."'>".$link['pagina']."</a></li>";
    }
  echo "</ol>";
  }
}


Potete darmi una mano?
Avatar utente
straus
Neo Iscritto
Neo Iscritto
 
Messaggi: 1
Iscritto il: dom apr 13, 2014 5:34 pm


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 15 ospiti

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising