Visualizzazione risultati 1 fino 14 di 14

Discussione: Parole con accento

  1. #1
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito Parole con accento

    Salve a tutti, ho un nuovo problemino da risolvere, ma per me ostico.
    Come da oggetto non riesco a sistemare le parole con l'accento.
    Ho provato a mettere nel file di connessione al db e che poi richiamo in ogni pagina, questo codice:
    Codice PHP:
    $db = mysql_connect($db_hostname, $db_username, $db_password);
    mysql_set_charset('utf8', $db);
    per forzare la codifica UTF8, ma sembra non servire.
    Ho provato allora anche ad inserire il meta-tag
    Codice:
    <meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">
    Ma anche questo non risolve il problema. Non so più cosa fare.
    Qualcuno sa spiegarmi come procedere ?
    Grazie

  2. #2
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Ho in parte risolto mettendo in testa hai file che visualizzano i dati
    Codice PHP:
    header('Content-type: text/html; charset=utf-8');
    Mi sono accorto però che nel database le parole accentate vengono troncate.
    Ad esempio sarà lo scrive sar senza la à.
    Uff ...

  3. #3
    Guest

    Predefinito

    Invece di eseguire

    Codice PHP:
    mysql_set_charset('utf8', $db);
    prova a eseguire questa query prima di salvare i risultati.
    Basta che esegui la query sulla connessione attiva poi la tiene finchè non la chiudi.

    Codice PHP:
    mysql_query("SET CHARACTER SET utf8");
    Fammi sapere se funge, byee ;)

  4. #4
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Grazie come sempre del tuo interessamento.
    Ho provato e adesso nel database salva le parole accentate con il ?
    Quindi sarà diventa sar?

    Ti mostro il breve listato che sto testando per inserire un nuovo autore:
    Codice PHP:
    <?php
    include("collega.php");
    mysql_query("SET CHARACTER SET 'utf8'");
    $aut= mysql_real_escape_string($_POST['autore']);
    $query = "INSERT INTO autori (nome) VALUES ('$aut')";
    if (
    mysql_query($query, $db))
    header("location: http://pierinik.altervista.org/inserisci.php");
    else
    echo
    "Errore durante l'inserimento".mysql_close($db);
    ?>
    Magari riesci a vedere qualcosa di particolare che non va bene. Grazie e ciao

  5. #5
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Ciao pxy,
    ho risolto il problema in questo modo.
    Codice PHP:
    <?php
    include("collega.php");
    $aut= utf8_decode ($_POST['autore']);
    $query = "INSERT INTO autori (nome) VALUES ('".utf8_encode($aut)."')";
    if (
    mysql_query($query, $db))
    header("location: http://pierinik.altervista.org/inserisci.php");
    else
    echo
    "Errore durante l'inserimento".mysql_close($db);
    ?>
    Vorrei avere una conferma se è il modo giusto di procedere.
    Perchè in questo modo mi salva la parola accentata, ma ho notato che mi da errore in alcuni casi nella ricerca.
    Riguardo al nome accentato di un autore il problema potrebbe essere minimo, anche se comunque scomodo, ma quando dovrò far inserire dei titoli con parole più articolate come ad esempio: così è se vi pare, il risultato è negativo, anzi segnala anche un errore. Per questo mi chiedevo come era meglio impostare le cose.
    Grazie.

  6. #6
    Guest

    Predefinito

    Prova a fare queste prove/controlli:

    1) Inserisci direttamente nel sql dei caratteri accentati senza passarli da variabili Php.
    Utilizza prima l'istruzione sql che ti ho passato io
    Ovvero:

    Codice PHP:
    mysql_query("SET CHARACTER SET utf8");
    mysql_query("INSERT INTO ciao(esempio) VALUES ('è! ora speriamo funzioni')");
    Compare sempre il punto interrogativo?

    2) Le tabelle mysql che set di caratteri hanno? di default dovrebbe essere utf8_general mi pare, ma controllare non guasta ;)

    3) Come passi i dati tra html e php? Con un semplice POST/GET o una richiesta asincrona?

    4) Quando il dato che devi inserire in mysql arriva a php prova a fare un echo(); e vedi che esce fuori, magari l'errore non è nel mysql ma prima.

    Purtroppo il set di caratteri è sempre una cosa un pò rognosa :P

  7. #7
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Grazie per la pazienza. Sei un grande.
    Adesso funziona.
    Ho provato prima il tuo esempio che ha funzionato. Quindi di nuovo il mio penultimo script (non quello con utf8_decode e utf8_encode) e stavolta ha funzionato. Non so perchè prima non andava. Però meglio così.

    Ho però ancora un problemino. Quando faccio la ricerca di una parola con lettera accentata non mi viene trovato.
    Cioè se cerco ad esempio la frase "così è se vi pare" (che adesso c'è nel db) la risposta è zero.
    Se cerco solo "se vi pare", mi trova il titolo e me lo scrive anche in maniera corretta.
    Idem con "è! ora speriamo funzioni", se inserisco la frase per intero non la trova, ma se cerco "ora speriamo funzioni" mi riporta l'intera frase correttamente.
    In sostanza se nel campo di ricerca c'è una lettera accentata, questa compromette il risultato.

    La query che ho usato è questa:
    Codice PHP:
    $sql="SELECT Idautore,nome FROM autori WHERE nome like '%".mysql_real_escape_string($_POST['autore'])."%'";
    Come posso risolvere ? Grazie ancora.

  8. #8
    Guest

    Predefinito

    Mmmh, fai sempre

    Codice PHP:
    mysql_query("SET CHARACTER SET utf8");
    anche prima di tentare la selezione?
    Io consiglio di fare una classe per connettersi e far eseguire la query nella classe cosi non ti sbagli.


    Prova a fare anche un var_dump della variabile mysql_real_escape_string($_POST['autore']) subito prima di fare la query, giusto per vedere se è quello :P


    Ps. al posto di mysql sarebbe preferibile usare mysqli, mamma mia! ci ho messo una vita a ricordarmi che mysql era procedurale e non a classi! incubo!

  9. #9
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Non ci capisco più niente.
    Ho fatto come mi hai suggerito e ho verificato cosa tirava fuori con un echo.
    La parola mostrata va bene, ma nonostante questo nella query non risulta.
    Mi spiego meglio cercando l'autore "Bartolomé de Las Casas" nella pagina mi stampa il nome corretto, ma la query risulta nulla.
    Non trova il nome, come non ci fosse.

    Ho provato allora a ricercare solo la parte finale del nome, cioè "de Las Casas" e stavolta la query lo trova, ma così: Bartolomé de Las Casas.
    Ho controllato nel db è archiviato bene, "Bartolomé de Las Casas".
    Uffa, questo utf8 non si riesce a domare.
    Stavolta SET CHARACTER SET utf8 non sembra servire.
    Ciao e grazie ...

  10. #10
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,211

    Predefinito

    Premetto di non aver letto con molta attenzione tutto il thread, ma:

    Citazione Originalmente inviato da pierinik Visualizza messaggio
    per forzare la codifica UTF8, ma sembra non servire.
    Ho provato allora anche ad inserire il meta-tag
    Codice:
    <meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">
    Ma anche questo non risolve il problema.
    Se vuoi forzare UTF-8, devi usare:
    Codice:
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    Ciao!

  11. #11
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Grazie alemoppo dell'indicazione. Avevo già provato anche questa soluzione.
    Volete sapere qual'è la cosa strana e che veramente mi lascia senza parole ?
    E' che nel modesto sito che sto facendo, nella parte pubblica la ricerca funziona.
    http://pierinik.altervista.org/
    Cioè se si va sul sito e si fa una ricerca di un titolo che contenga ad es. la parola carità, funziona.
    Funziona senza aver dovuto far niente di particolare. Ho messo solamente :
    Codice PHP:
    header('Content-type: text/html; charset=utf-8');
    Poi per la query non ho dovuto far nient'altro perchè estrapolasse le parole anche accentate.

    Adesso invece, nell'area protetta di inserimento, ho questa serie di problematiche.
    Prima non riuscivo a inserire nuovi autori nel db, che grazie a pxy ho risolto e ora non riesco a farne l'estrazione se hanno una lettera accentata. In teoria dovrebbe funzionare come prima, ma sia aggiungendo i comandi suggeriti, sia senza, ho sempre le stesse condizioni di visualizzazione come ho scritto nel precedente post con l'esempio Bartolomé de Las Casas.

    Per una maggior comprensione ho lasciato l'accesso libero all'area protetta.
    Quindi potete testare il tutto andando a questo indirizzo http://pierinik.altervista.org/inserisci.php Per il momento funziona solo la voce "Inserisci un nuovo libro" dove bisogna ricercare un autore in archivio.
    Grazie veramente a tutti.
    Ultima modifica di pierinik : 14-01-2015 alle ore 06.58.38

  12. #12
    Guest

    Predefinito

    Non è che hai la codifica del documento della pagina è in ANSI invece che UTF-8?

    Con notepad++ vai su "Formato" (è uno dei menù) e vedi cosa è selezionato, se non è UTF-8 selezionalo e poi riprova :/
    Ultima modifica di pxy : 14-01-2015 alle ore 12.57.20

  13. #13
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    In notepad++ è selezionato codifica in UTF8 (senza BOM). In questo modo con echo mi stampa la parola correttamente.
    Se seleziono solo codifica in UTF8 , mi stampa al posto della parola accentata il punto interrogativo dentro un rombo.

    Quindi su notepad++ dovrei essere a posto.

    Provando e riprovando ho trovato questa soluzione:
    Codice PHP:
    $sql="SELECT Idautore,nome FROM autori WHERE nome like '%".mysql_real_escape_string(utf8_encode($_POST['autore']))."%'";
    Cioè ho aggiunto utf8_encode alla query, non credo sia la soluzione più corretta, ma non riesco diversamente a venirne fuori.
    Le codifiche mi sembra di averle fatte tutte correttamente.
    Grazie della pazienza.

  14. #14
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Alla fine ho risolto. Ho ricreato da zero le tabelle su altervista ed ho importato i record.
    In questo modo funziona. Le parole accentate si comportano bene.

    Chissà perchè le tabelle fatte su notepad++ avessero dei problemi.
    Qualcosa di sbagliato ci dev'essere nonostante andassero bene le impostazioni.
    Va bé ! Andiamo avanti.
    Grazie a tutti dell'aiuto in particolar modo al supporto di pxy.

Regole di scrittura

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