- Home
- Categorie
- Coding e Sistemistica
- Coding
- Salvare in Database, entità
-
Salvare in Database, entità
Ciao a tutti, ho un problema nel salvare i dati di un form in un Database.
Il database è su server Aruba ed ha come codifica predefinita "UTF-8 Unicode".Nella pagina dove è presente in form ho impostato questo:
[HTML]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it" lang="it">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
[/HTML]Quando scrivo in una textarea una parola accentata, la salva sul database così:
à --> Ã
è --> è
é --> Ã
ì --> ì
ò --> ò
u --> ùCome faccio ad ovviare a questo problema?
Grazie
-
Ciao talkoman,
succede che ti cambia i caratteri perchè in realtà vengono inviati con il charset iso-8859.Quando ricevi i dati negli script PHP prova ad utilizzare la funzione
utf8_encode().qui puoi trovare le informazioni che ti servono:
us2.php.net/manual/en/function.utf8-encode.phpCiao
-
Ciao ho provato ad usare la funzione che mi hai consigliato.
Se inserisco la è, viene fuori questo scarabocchio:A video: Ã�¨
Su DB: �¨
-
Ciao,
mi pare proprio molto strano.Potrei capire a video, ma se te dici che il DB di aruba è UTF-8 adesso dovrebbe proprio vedersi corretto quel carattere.
Io le utilizzo e funzionano correttamente.
Prova a vedere che non sia il tuo browser per caso ad essere configurato con una codifica strana, cioè che i tuoi dati non siano inviati con un charset differente dall'iso-8859-1.
Ciao
-
@mirkoagrati said:
Prova a vedere che non sia il tuo browser per caso ad essere configurato con una codifica strana, cioè che i tuoi dati non siano inviati con un charset differente dall'iso-8859-1
Come faccio?
-
Ciao,
solitamente è nel menù visualizza->carattere dei browser.Io utilizzo FF ed è la voce 'codifica caratteri' del menù visualizza.
Ciao
-
Si ma io ho provato da:
- IE 8 su WIN
- FF su Mac
- Chrome su WIN
- Safari su Mac
Succede la stessa cosa da tutti e 4 i browser...
-
Ciao,
continua ad esserci qualcosa che non torna.Direi sicuramente lato server, a questo punto.
Bho,
per tagliare la testa al toro puoi provare a trasformare tutti quei caratteri in entità HTML con la funzione:
[PHP]string htmlentities ( string $string [, int $quote_style = ENT_COMPAT [, string $charset [, bool $double_encode = true ]]] )[/PHP]Ciao
-
Mi succede anche un'altra cosa strana...
Ho due pagine.
Tutte e due così impostate:[HTML]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it" lang="it">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />[/HTML]In una vedo la à così: à
E nell'altra la vedo così: ÃHo controllato da codice e entrambe risultano essere scritte "à" e non "à"
Le due pagine si trovano sempre sullo stesso server Aruba...
-
Allora prova a mettere tutte e 3 in utf-8 ed in tutte e tre prova a rimuovere l'attributo 'lang=' nella dichiarazione dell'elemento <html>.
Almeno dovrebbero comportarsi tutte nello stesso modo.
Così da lavorare su una sola pagina per sistemarle tutte e tre.
Ciao
-
Ok ma come faccio a risolvere

-
Ciao,
ho riflettuto un attimo sul tuo problema,
in particolare sulla questione dell'encoding in UTF-8:così, da un'analisi a spanne ho il dubbio che il DB non sia in UTF-8.
Per testare questa possibilità anzichè utilizzare utf8_encode prova ad utilizzare la utf8_decode.
Se fosse come ho pensato dovrebbe funzionare così:
la request (browser <-> PHP) è codificata in UTF-8 (corretto, ormai è standard) e i dati li decodifichi (utf8_decode) in ISO-8859 prima dell'inserimento nel DB.
A questo punto dovresti vedere correttamente i dati in tabella, ma non nelle pagine PHP se prima non li codifichi in UTF-8 (utf8_encode).Ciao
-
Quindi la procedura da fare è la seguente?
- Prima di inserire i dati nel DB faccio
[PHP]utf8_decode($tringa)[/PHP] e la metto nel DB
Poi per leggere dal DB faccio
[PHP]utf8_encode($tringa)[/PHP]
Correggimi se sbaglio
- Prima di inserire i dati nel DB faccio
-
Esatto,
proprio quello che volevo spiegarti.E' da prendere con le pinze,
ovvero è il risultato di miei ragionamenti senza aver visto codice.Prova e fammi sapere.
Ciao
-
FUNZIONAAAAA!!!! Anche se quando leggo dal DB non metto encode_uft8()
Ma per l'invio delle email con la funzione mail() per evitare che arrivino caratteri strani agli utenti, come devo fare? Sapresti aiutarmi anche lì?
Grazie di tutto
-
Dunque,
la prima cosa da fare è avvisare quelli di Aruba (se è vero quello che hai letto e hai postato) che il loro DB non è UTF-8.Poi per l'invio di email è ormai la solita minestra:
prova a giocare con queste due funzioni.Comunque, se invii le mail in formato HTML potresti dare per scontato che è come aver a che fare con un browser, e quindi saresti già a posto.
Ciao e buon lavoro
-
L'ho dedotto io che il database è in UTF-8 da qui:
[URL=http://img29.imageshack.us/i/immagine2xf.png/]

-
manca il link
-
C'è l'immagine...

-
Aiuto,
mi sono rincoglionito:non vedo ne link ne immagini.
