• Super User

    problema con str_replace

    Ragazzi, sto impazzendo.
    Premetto che di php ci capisco poco, ma stavolta mi è toccato. Probabilmente è una boiata ma non ci capisco molto

    • lavoro tutto, da form a db ad output a file html, in utf-8
    • ho una funzione che mi mette a posto il testo, del tipo
    function formattaOk($frase) {
    // converto il testo  //
    $nono = array("à", "á", "ä", "â", "ã");
    $sisi = array("a", "a", "a", "a", "a");
    $frase1 = str_replace("  ", " ", $frase);
    $frase1 = str_replace(" ", "-", $frase1);
    $fraseOk = str_replace($nono, $sisi, $frase1);
    return $fraseOk;
    }
    

    poi altrove faccio un semplice
    $testoOk = formattaOk($_POST['testo']);
    e sparo il risultato sul db

    • quando vado a leggere, dal DB nel quale ho immagazzinato la parola (ma lo vedo anche da phpmyadmin), sto maledetto mi restituisce la parola con la lettera accentata

    nota. anche aggiungendo una funzione htmlentities, fa lo stesso, se metto un normale str_replace("à", "a", $frase1); fa lo stesso
    mi toglie gli spazi, mi mette le lineette, mi prepara il caffè ma quelle maledette accentate non le toglie

    Lo so che deve essere un problema di utf-8, che voglio mantenere, ma dove (e perchè)?

    Per favore, se possibile non soluzioni alternative tipo il cambio della codifica 😉

    Grazie mille
    Ciao


  • User Attivo

    ciao Hogudo,

    Non ho provato il tuo codice, ha prima vista, mi sembra corretto farei un pò di prove per chiarirmi qualche dubbio...

    Però se vuole :sbav: può utilizzare questo codice,

    function formattaOk($title){
    
    $title = strtolower(str_replace("Ñ", "n", str_replace("ñ", "n", str_replace("ú", "u", str_replace("ó", "o", str_replace("í", "i", str_replace("á", "a", str_replace("?", "f", str_replace("Ü", "u", str_replace("Ö", "o", str_replace("û", "u", str_replace("ö", "o", str_replace("ô", "o", str_replace("Æ", "ae", str_replace("É", "e", str_replace("Å", "a", str_replace("Ä", "a", str_replace("ì", "i", str_replace("î", "i", str_replace("ï", "i", str_replace("ë", "e", str_replace("ê", "e", str_replace("ç", "c", str_replace("å", "a", str_replace("ä", "a", str_replace("â", "a", str_replace("ü", "u", str_replace("Ç", "c", str_replace("Á", "a", str_replace("æ", "ae", str_replace("ö", "o", str_replace("ó", "o", str_replace("ù", "u", str_replace("à", "a", str_replace("ò", "o", str_replace("é", "e", str_replace("è", "e", $title)))))))))))))))))))))))))))))))))))));
    
    return str_replace("   ","-",$title);
    
    }
    
    

    Ti ho leggermente modificato una funzione che uso per gestire gli url della directory in firma.

    Anche io come te voglio salvare sul db che come il tuo è utf8 i caratteri senza accenti.

    La funzione sopra mi funziona perfettamente, poi c'è anche la sostituzione dei tre spazi bianchi con il trattino.

    In pratica l'interfaccia ingresso/uscita della funzione è uguale alla tua, ho evitato di cancellarti gli altri caratteri che modifico io, magari ti può servire, altrimenti basta togliere le str_replace che non ti servono.

    Dimmi se risolvi, perchè a me funzione, abbiamo la stessa codifica nel db, ti dovrebbe funzionare.

    :ciauz:


  • User Attivo

    Ops..

    magari togli la funzione **strtolower **probabilmente vorrai mantenere i maiuscoli ancora maiuscoli...


  • Super User

    magari togli la funzione strtolower probabilmente vorrai mantenere i maiuscoli ancora maiuscoli...
    No, naturalmente li avevo tolti con un semplice $frase1 = strtolower($frase); 😉 visto che li uso in maniera simile al titolo


  • User Attivo

    In tempo reale... 🙂

    Ha funzionato l'accrocchio ?


  • Super User

    No. Boia d'un cagnaccio 😄
    Pur essendo giusto (come d'altra parte credo fosse giusto il mio, visto che aveva fatto sempre il suo lavoro, in "iso") qualcosa, secondo me della codifica del tutto in utf-8, non lo fa lavorare bene....

    Parrebbe, ma ripeto che non sono assolutamente esperto, che la "à" che gli arriva in utf-8 non sia considerata "à" da php (ho usato la a, ma in realta nella versione originale dell'array ci sono moltissimi caratteri)


  • User Attivo

    Ah ecco, non avevo capito, tu a differenza mia, hai anche il "charset" del php a utf8.

    Il problema dovrebbe stare dove dici tu, perchè cambiando quel charset a iso funziona.. :mmm: con utf8 non funziona...

    ci penso un pò.. ora sono un pò fuso ...

    😞


  • Super User

    Controllato. con ISO funziona ma, visto che "tu gust is mei che uan", deve funziare anche con utf.

    Se non trovo risoluzione entro giovedì smuovo il mondo.... ma possibile che nessuno lavori con utf dall'inizio alla fine?