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

    Lettere accentate intorrompono il campo nell'insert

    Un problema che non mi era mai capitato di incontrare. Quando inserisco in un DB mysql mediante uno script php un testo con lettere accentate nel DB risulta presente solo la parte precedente alla prima lettera accentata. Naturalmente ho messo colllation a UTF-8 ed ho impostato sullo script php: mysql_set_charset('utf8') come facio di solito.
    Curiosamente se replico la query direttamente sul DB il campo entra regolarmente, così come regolare è il testo quando lo visualizzo prima dell'insert.
    Questo è il php dove il campo anomalo è post:

    Codice PHP:
    echo $post;
    mysql_connect($server,$username,$password);
    mysql_set_charset('utf8');
    @
    mysql_select_db($database) or die( "<error>Unable to select database</error>");
    $query "INSERT INTO entries VALUES ('','".$email."','".$post."',CURDATE())";
    mysql_query($query); 
    Mentre il tutto può anche essere visualizzato in linea agli indirizzi:

    http://www.miafoto.it/iPhone/phpMedia/sweepform.php
    per inserire ed:
    http://www.miafoto.it/iPhone/phpMedia/displayPosts.php
    per visualizzare.

    Qualcuno mi può aiutare?

    Grazie, Fabrizio

  2. #2
    non sono sicuro che htmlentities() risponda alla tua necessità, nel caso non lo faccia devi fare un str_replace di tutti i caratteri (nel tuo caso lettere accentate), trasformando la lettera in questione nella loro entità html.

  3. #3
    Utente di HTML.it L'avatar di Laxus
    Registrato dal
    Oct 2010
    Messaggi
    251
    $email e $post contengono stringhe utf-8 valide?

  4. #4
    Se la stringa da inserire nel db proviene da un form su di una pagina html devi ricordarti di codificare in utf-8 l'intera pagina tramite meta tag e anche il tag form che usi per inviare il dato post, spesso se non dichiari la codifica i browser tendono comunemente ad impostare la ISO-8859-1 di default, e quindi il db con tabella a utf-8 non riconosce il carattere. Non c'è bisogno di nessun str_replace o funzione creata ad hoc, provare per credere.
    Perpetual Ribellion With Absolutely No Cause

  5. #5
    Originariamente inviato da DrugsMatt
    Se la stringa da inserire nel db proviene da un form su di una pagina html devi ricordarti di codificare in utf-8 l'intera pagina tramite meta tag e anche il tag form che usi per inviare il dato post, spesso se non dichiari la codifica i browser tendono comunemente ad impostare la ISO-8859-1 di default, e quindi il db con tabella a utf-8 non riconosce il carattere. Non c'è bisogno di nessun str_replace o funzione creata ad hoc, provare per credere.
    In effetti quella pagina non aveva proprio l'header, pensavo bastasse impostare l'sql, essendo incorporata come iFrame. Ora lo ho aggiunto ed in effetti le lettere mi si sono trasformate nei noti caratteri grafici che dovrei risolvere con htmlentities:

    a ... pu� essere
    INSERT INTO entries VALUES ('','fbartolom@gmail.com','pu� essere',CURDATE())


    Tuttavia sul DB continua add arrivare la stringa tagliata come potete vedere ai link di sopra.
    Questo è l'header che ho incluso:

    codice:
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
    <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
    </head>
    Riguardo il post non ho compreso: il testo viene raccolto direttamente sulla pagina in un form e da lì inserito sul DB mediante il codice riportato nel messaggio originale.

    Qualche altra idea?

  6. #6
    prova ad inserire anche la codifica nel tag form in questo modo:

    <form method="post" accept-charset="utf-8">

    il meta tag va bene come l'hai impostato, se proprio vuoi fare una prova puoi anche mettere solo text/html nel content :

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

    inoltre, non so se l'hai messo ma conviene sempre mettere la DTD sopra al tag html

    es.:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

    Poi.. ho visto che hai selezionato la codifica tramite funzione php "mysql_set_charset('utf8');", ma la tabella del database è stata creata con la codifica utf-8 ? Non basta impostarlo tramite php, anzi, non servirebbe nemmeno.. Vai nei dettagli della tabella nel db e leggi con che codifca è creata, se non è utf-8 ricreala con tale codifica.
    Perpetual Ribellion With Absolutely No Cause

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    81

    Lettere accentate

    usa la funzione addslashes
    esempio
    $nomevar = addslashes($_POST['nomevar']);
    ok?
    spero di esserti stato utile

  8. #8
    Originariamente inviato da DrugsMatt
    prova ad inserire anche la codifica nel tag form in questo modo:

    <form method="post" accept-charset="utf-8">

    il meta tag va bene come l'hai impostato, se proprio vuoi fare una prova puoi anche mettere solo text/html nel content :

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

    inoltre, non so se l'hai messo ma conviene sempre mettere la DTD sopra al tag html

    es.:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    Sì, ok, ma non penso il problema sia nll'html in quanto raccolgo il messaggio in:
    http://www.miafoto.it/iPhone/phpMedia/sweepform.php
    e lo visualizzo ancora integro nel file php che processa il form: se il problema fosse lì penso che si manifesterebbe anche nell'echo.

    Poi.. ho visto che hai selezionato la codifica tramite funzione php "mysql_set_charset('utf8');", ma la tabella del database è stata creata con la codifica utf-8 ? Non basta impostarlo tramite php, anzi, non servirebbe nemmeno.. Vai nei dettagli della tabella nel db e leggi con che codifca è creata, se non è utf-8 ricreala con tale codifica.
    Uso phpadmin e questa è la sezione relativa:
    codice:
    CHARACTER_SET_NAME 	varchar(32) 	utf8_general_ci 		No 			
    	DEFAULT_COLLATE_NAME 	varchar(32) 	utf8_general_ci 		No 			
    	DESCRIPTION 	varchar(60) 	utf8_general_ci 		No 			
    	MAXLEN 	bigint(3) 			No 	0
    Ho cancellato la tabella e la ho ricreata con collation generale utf-8, come vedi nel file allegato, ma il problema è rimasto lì.
    Immagini allegate Immagini allegate

  9. #9

    Re: Lettere accentate

    Originariamente inviato da yomega
    usa la funzione addslashes
    esempio
    $nomevar = addslashes($_POST['nomevar']);
    ok?
    spero di esserti stato utile
    Direi di sì. Messe insieme tutte le cose ora funziona, come potete vedere.
    Curiosamente occorre ricaricare il form perchè gli aggiornamenti del php di gestione vengano considerati. Sembra che il browser si metta in cache anche i php riferiti nei form.

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.