• User Attivo

    Problema con caratteri accentati e apici php mysql

    Salve a tutti,
    Ricevendo dei dati da un form per poi salvarli in un database, li elaboro in questo modo eliminando caratteri speciali.

    [PHP]
    $titolo = addslashes($_POST['titolo']);
    $sottotitolo = strip_tags($_POST['sottotitolo']);
    $corpo_notizia = strip_tags($_POST['corpo_notizia']);

                    function puliscistringa($stringa)
                    {
                        $stringa = str_replace("à", "a", $stringa);
                        $stringa = str_replace("è", "è", $stringa);
                        $stringa = str_replace("ì", "i", $stringa);
                        $stringa = str_replace("ò", "o", $stringa);                        
                        $stringa = str_replace("ù", "u", $stringa);
                        //@$stringa = ereg_replace("[^A-Za-z0-9' ]", "", $stringa );
                        return $stringa;
                    }
                    $titolo = puliscistringa($titolo);
                    $corpo_notizia = puliscistringa($corpo_notizia);
                    // se nel php.ini non è abilitato il "magic_quotes_gpc"
                    if (!get_magic_quotes_gpc())
                    {
                        // funzione ricorsiva per l'aggiunta degli slashes ad un array
                        function magicSlashes($element)
                        {
                            if (is_array($element))
                                return array_map("magicSlashes", $element);
                            else
                                return addslashes($element);
                        }
                        // Aggiungo gli slashes a tutti i dati GET/POST/COOKIE
                        if (isset ($_GET)&& count($_GET))$_GET = array_map("magicSlashes", $_GET);
                        if (isset ($_POST)&& count($_POST))$_POST = array_map("magicSlashes", $_POST);
                        if (isset ($_COOKIES)&& count($_COOKIES))$_COOKIE = array_map("magicSlashes", $_COOKIE);
                    }
    

    [/PHP]

    Quando vado a salvare nel database mi esce nel titolo questo => l'articolo ora è inserito <= ed è giusto, ma perchè mi esce pure quel carattere speciale ?

    Inoltre se aggiungo apici e doppi apici mi da 1 errore sql e non mi fa inserire nulla nel database.
    Come posso risolvere entrambi i casi ?

    Il mio database è
    [TABLE="class: data"]
    [TR="class: odd"]
    [TD]InnoDB[/TD]
    [TD]latin1_swedish_ci[/TD]
    [TD="class: value tbl_size"][/TD]
    [/TR]
    [/TABLE]


  • ModSenior

    Ciao infosicurezza,
    il primo problema è dato dalla codifica che utilizzi, questa discussione può esserti utile.
    Per il secondo problema può invece leggere questa guida.


  • User Attivo

    Grazie per la risposta, ho risolto seguendo le tue guide e gli altri post di questo forum.


  • User Attivo

    Secondariamente, nello str_replace della "è" non hai inserito la "e" senza accento 😄


  • User Attivo

    lo fato di proposito, altrimenti chi scrive commette un errore di ortografia


  • User Attivo

    Sono di nuovo qui, mi sapete dire perchè alla stampa della query mi escono i caratteri speciali ?
    Nel database i caratteri accentati sono normali.


  • ModSenior

    È a causa di problemi di codifica, è spiegato nel primo link che ti ho dato.


  • User Attivo

    Si lo seguita, e mi funziona se stampo le variabili in php. Se scrivo in un tag <p> </p> html (statico) non mi visualizza i caratteri, ma questo simbolo �
    Da cosa può dipendere ?
    Nel file php ci metto questo nell'head
    [php]
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    [/php]
    e nella connessione ho questo
    [php]
    mysql_query("SET CHARACTER SET 'utf8'");
    [/php]
    Il mio db pure porta utf8