Visualizzazione risultati 1 fino 8 di 8

Discussione: Scrittura su database o su file di lettere accentate

  1. #1
    Guest

    Predefinito Scrittura su database o su file di lettere accentate

    Sono almeno tre ore che sto cercando di salvare una stringa su un database o su un file. In entrambe i casi se la stringa include una lettera accentata, al suo posto viene salvata una coppia di caratteri: tipo è (c'è una coppia di caratteri per ogni carattere "strano").
    Ho provato con la funzione str_replace() ma non funziona.
    C'è qualcuno che ha idea di come possa risolvere il problema?

  2. #2
    Guest

    Predefinito

    Sarebbe meglio se tu postassi lo script con cui operi ;)


    Ciaooo!!!

  3. #3
    Ospite Guest

    Predefinito

    Possiamo aiutarti solo se posti lo script php in questione.
    [EDIT]Debug è stato + veloce[EDIT]

  4. #4
    Guest

    Predefinito

    OK scusate.
    Eccolo qui.

    E' il controllo di una via di mezzo tra una newsletter e un servizio news, una volta superato il log in l'admin scrive una news che viene aggiunta in un file per essere letta insieme a tutte le altre news, e allo stesso tempo dovrà inviare una mail al database di utenti registrati (la seconda parte non l'ho ancora scriptata).



    Dal form precedente vengono inviate a questa pagina le variabili
    $oggetto = VARCHAR(20)
    $testo = TEXT(5000)

    Codice PHP:
    <?php
    error_reporting
    (E_ALL | E_NOTICE);

    $conn = mysql_connect ("localhost", "scuolesuperiori", "**********");

    $db = mysql_select_db("my_scuolesuperiori");

    // Formatto la data in italiano.
    switch (date('w'))
    {
    case
    0: $stringa_data = "Domenica ";
    break;
    case
    1: $stringa_data = "Luned&igrave; ";
    break;
    case
    2: $stringa_data = "Marted&igrave; ";
    break;
    case
    3: $stringa_data = "Mercoled&igrave; ";
    break;
    case
    4: $stringa_data = "Gioved&igrave; ";
    break;
    case
    5: $stringa_data = "Venerd&igrave; ";
    break;
    case
    6: $stringa_data = "Sabato ";
    break;
    }
    $stringa_data.=date('j');

    switch (
    date('n'))
    {
    case
    1: $stringa_data .= " Gennaio ";
    break;
    case
    2: $stringa_data .= " Febbraio";
    break;
    case
    3: $stringa_data .= " Marzo ";
    break;
    case
    4: $stringa_data .= " Aprile ";
    break;
    case
    5: $stringa_data .= " Maggio ";
    break;
    case
    6: $stringa_data .= " Giugno ";
    break;
    case
    7: $stringa_data .= " Luglio ";
    break;
    case
    8: $stringa_data .= " Agosto ";
    break;
    case
    9: $stringa_data .= " Settembre ";
    break;
    case
    10: $stringa_data .= " Ottobre ";
    break;
    case
    11: $stringa_data .= " Novembre ";
    break;
    case
    12: $stringa_data .= " Dicembre ";
    break;
    }

    $stringa_data .= date ('Y');
    //fine formattazione data.


    //questa istruzione non funziona come non funzionavano le altre str_replace() non so perché.
    str_replace("\n","<br>",$testo);


    //questa era la stringa che originariamente veniva scritta su un file con fwrite()
    //$stringa = "\n<b>$oggetto</b> - <i>$stringa_data</i><br>\n$testo<br><br>\n";


    $query = "INSERT INTO news_testi(ID, oggetto, data, testo) VALUES ('','$oggetto','$stringa_data','$testo')";

    $res = mysql_query ($query);

    //questa è un'istruzione aggiunta per debug, volevo vedere se in questo script il testo arriva con le lettere accentate o con strani simboli. (Arriva con le lettere corrette)
    echo $testo;

    if (
    $res)
    echo
    "Grazie per aver utilizzato il servizio news!";
    ?>
    Grazie per l'aiuto.

  5. #5
    Guest

    Predefinito

    mmm, hai provato ad andare a vedere direttamente nel db come vengono scritte?
    Per gli "a capo" dovresti usare questa modalità:

    $testo=str_replace("\n","<br>",$testo);

    ma ti conviene molto di più:

    $testo=nl2br($testo);

    che è fatta appositamente per questo scopo.


    Ciaooo!!!

  6. #6
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Il problema riguarda sicuramente la CODIFICA dei caratteri; le accentate vengono mostrate in quel modo quando queste sono state inviate/scritte in una pagina con codifica "UTF-8" e mostrate in un'altra con altra codifica o quella standard (ISO-8859-1) o la situazione inversa.
    Leggi per es. problemi simili in questo thread (4° messaggio):
    http://forum.altervista.org/showthread.php?t=44481

    Di solito una codifica si specifica in testa al codice html, nei meta tags ad es:
    <META http-equiv="Content-Type" content="text/html; charset=UTF-8">

    ..ma vedo che nelle pagine del tuo sito MANCA proprio il tag di apertura <HTML> (che non è bello eh ).

    Qual è esattamente il link della pagina da dove inserisci nel db le accentate? c'è una pagina? se sì controlla che non ci sia un META tag tipo quello sopraindicato, con UTF-8.
    Fammi sapere, ciao.
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  7. #7
    Guest

    Predefinito

    Verissimo! Adesso funziona!
    è bastato aggiungere il tag meta ed è partito tutto!
    Purtroppo per come è costruito il sito ho dovuto cambiare la codifica di tutte le pagine e le lettere accentate scritte con l'editor di altervista venivano riprodottoe con un "?", ma è un problema minimale perchè è bastato forzare la codifica in ISO invece che il UFT-8 e il problema era risolto.

    Per quanto riguartda la mancanza dei tag <html>, <head>, <body>... è perchè lo script passato è una file di inclusione che la pagina carica con la funzione include() su richiesta.
    Quindi html, head, body... sono contenuti nella pagina principale che richiama al suo interno questo script.
    Questo è anche il motivo per cui ho cambiato la codifica di tutte le pagine del sito cambiando la codifica della pagina principale.
    Non so se sono stato chiaro, credo di no.. ma se caricate l'homepage e cliccate su una voce qualsiasi del menu capite immediatamente cosa intendo: la vostra selezione viene inviata con metodo get alla pagina principale che carica la pagina corrisponente (tipo IFRAME).

    Comunque alla fine ho tolto il database perchè ero molto più comodo col file

    Per quanto riguarda la sostituzione degli a capo... hai ragione, debug. Sono troppo abituato ai puntatori del C ...
    La funzione nl2br non riesco a usarla perchè non toglie il \n e se la rieseguo più volte sulla stessa stringa aggiunge svariati <br /> che mi danno noia.

    Grazie mille a tutti!!! Ciao ciao!

  8. #8
    incuso non è connesso Utente
    Data registrazione
    27-09-2003
    Messaggi
    173

    Predefinito

    Secondo me anche lo switch-case non è elegantissimo.

    Ti puoi definire una cosa del tipo

    $giorni=array('lunedì','martedì',...);
    $stringa_data=$giorni[date('w')];

    probabilmente come efficienza siamo allo stesso livello ma il codice piú corto è e piú leggibile è.

    Inoltre visto che si parla di scuole, metterei mesi e giorni minuscoli come da grammatica italiana

    M.
    Ultima modifica di incuso : 29-11-2005 alle ore 01.18.41

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •