Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 16 su 16

Discussione: Problemi con apostrofi

  1. #11
    certo che il problema ritorna, perché se mandi in output (echo) una stringa appena convertita in iso-8859-1 (attraverso utf_decode) quando il charset impostato per l'output è utf-8, ovvio che ci saranno dei problemi nei caratteri visualizzati, ti pare?

    Ma tu quella stringa così convertita non la devi mandare in output, perché hai detto che la converti in quel modo per salvarla sul database.

    Mi viene anche un dubbio in effetti, a che pro la converti per salvarla sul database?
    Puoi salvare del testo utf-8 anche se il db è impostato come latin1, i problemi sono minimi (nell'ordinamento in presenza di caratteri speciali, ma è una cosa marginale confrontata ai vantaggi, secondo me).

  2. #12
    Uso la funzione utf8_decode() perchè mi è stata suggerita in passato su questo forum. Senza di questa funzione in effetti, molti caratteri risultano sballati, sia salvandoli nel database sia mostrandoli a video.

    Ti riassumo cosa faccio al momento, così magari ti è più semplice aiutarmi.

    Il testo inserito nella form da un utente viene inviato ad una pagina che lo tratta con la funzione
    codice:
    function correggi_testo($testo)
    {
    	$testo_temporaneo=$testo;
    	$testo_temporaneo=str_replace("’","'",$testo_temporaneo);
    	$testo_temporaneo=str_replace("‘","'",$testo_temporaneo);
    	$testo_temporaneo=str_replace("`","'",$testo_temporaneo);
    	$testo_temporaneo=utf8_decode($testo_temporaneo);
    	$testo_temporaneo=mysql_escape_string($testo_temporaneo);
    	return $testo_temporaneo;
    }
    e salvato nel database.
    La pagine che mostrerà il testo legge il campo dal database e lo tratta con la funzione
    codice:
    function formatta($testo)
    {
    	$testo_temporaneo=$testo;
    	$testo_temporaneo=stripslashes(nl2br(htmlentities($testo_temporaneo)));
    	return $testo_temporaneo;
    }


    Puoi salvare del testo utf-8 anche se il db è impostato come latin1, i problemi sono minimi (nell'ordinamento in presenza di caratteri speciali, ma è una cosa marginale confrontata ai vantaggi, secondo me).
    Magari dovrei cambiare la codifica del database? Però il problema non è legato solo al salvataggio, è lo stesso anche nella stampa a video...

  3. #13
    allora, stai facendo un po' di confusione.

    Una stringa di testo ha una sua codifica propria, ok? Nel nostro caso può essere in utf-8 o in iso-8859-1.

    Tu mi hai detto che hai le pagine web in utf-8, quindi ricevi in input dalle pagine stringhe in utf-8, ma devi ovviamente anche restituire in output stringhe utf-8.

    La cosa più semplice che puoi fare, è appunto quella che ti dicevo: in input ricevi testo in utf-8 e lo salvi così come è nel database (anche se questo ha il collation in latin1, non verrà convertito niente, tranquillo).
    In output estrai il tuo testo (utf-8) dal database, e lo mandi al browser nelle tue pagine che hanno il charset impostato a utf-8.
    Risultato: Nessuna conversione, nessun problema.

    Se tu però vuoi per forza convertire il testo in iso-8859-1 per salvarlo nel database, allora non puoi pretendere che quel testo espresso in iso si veda correttamente anche dentro pagine con la codifica impostata a utf-8. Devi riconvertirlo in utf-8, se vuoi mandarlo in output.
    Risultato: Due conversioni, lentezza maggiore in esecuzione, perdita dell'utilità di avere utf-8 in output, essendo costretti a usare comunque solo il sottoinsieme di caratteri compatibile con iso-8859-1.

  4. #14
    Ora ho capito come funziona la cosa. Ora va tutto bene. In pratica facevo dei passaggi inutili, bastava restare sempre in UTF-8.
    Ho avuto solo dei problemi con l'uso di htmlentities($testo) che però ho risolto usando i parametri aggiuntivi htmlentities($testo,ENT_COMPAT,'UTF-8').

    Solo un'ultima cosa: il database attuale contiene il testo in iso-8859-1. Vorrei convertirlo in utf-8 in modo da poterlo usare direttamente.
    Posso secondo te farlo con un codice tipo
    codice:
    $query = "SELECT * FROM database";
    $result=mysql_query($query, $db);
    while ($row = mysql_fetch_array($result))
    {
    	$testo=$row['testo'];
    	$testo=utf8_encode($testo);
    	$query="UPDATE database SET testo='$testo' WHERE id=$row[id]";
    	mysql_query($query, $db);
    }

  5. #15
    sì, certo (supponendo che la tabella si chiami database, scelta curiosa )

  6. #16
    No, database è un nome fittizzio, usato solo per scrivere nel forum.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.