Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Problema codifica UTF-8

    Ciao!
    Allora avevo un problema quando dovevo inserire dei testi da form (ad esempio una descrizione di un immobile) perché l'utente poteva utilizzare gli apici e le lettere accentate.
    Se queste erano presenti la variabile non veniva inserita nel db, ma mi usciva un errore.

    Allora ho utilizzato questa variabile:

    Codice PHP:
    function codifica($stringa){
        
    $var mb_detect_encoding($stringa) ;
        if(
    $var == 'UTF-8' && mb_check_encoding($stringa,'UTF-8')){
            return 
    $stringa;
        }else{
            return 
    utf8_encode($stringa);
        }

    funziona perché riesco ad inserire le variabili nel db,
    ma quando faccio ad esempio un riepilogo, quindi devo prelevare dal db queste stesse variabili, nella mia pagine vengono visualizzate lettere non codificate: A con tildi ecc ecc.

    Come posso risolvere questo problema senza ritornare a quello precedente?

  2. #2
    Le pagine dovrebbero essere encodate in UTF-8... comunque per evitare questi errori comuni di codifica, conviene usare una codifica univoca per tutto... sia per le pagine che per il DB per evitare problemi di questo tipo.
    CrystalSoft | Software House & Web Agency di WinRefine, Mercante in Fiera e altro...
    Annunci Zoo | Annunci gratuiti per il mondo degli Animali
    ElettroMercatino | Annunci a tema Informatico ed Elettronico

  3. #3
    Eh lo so...
    Purtroppo non ho idea di come si faccia! Non sapevo neanche che esisteva questa codifica prima di incorrere nell'errore!
    Sono un'ignorantebbestia!

  4. #4
    Prova intanto a mettere come codifica dei file UTF-8 (senza BOM) e quindi settare nei meta l'encoding a UTF-8 con questa dicitura:
    codice:
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    Prova a vediamo se risolvi... comunque posta altri esempi di codice per capire se realmente è questo il problema o di come estrai e metti i dati (assicurati anche che nel DB non vengano salvati caratteri strani)
    CrystalSoft | Software House & Web Agency di WinRefine, Mercante in Fiera e altro...
    Annunci Zoo | Annunci gratuiti per il mondo degli Animali
    ElettroMercatino | Annunci a tema Informatico ed Elettronico

  5. #5
    Questo codice lo devo inserire in tutte le pagine del mio sito?

  6. #6
    Prova con quella incriminata (intanto vedi se il problema è questo prima di scrivere codice inutile).
    CrystalSoft | Software House & Web Agency di WinRefine, Mercante in Fiera e altro...
    Annunci Zoo | Annunci gratuiti per il mondo degli Animali
    ElettroMercatino | Annunci a tema Informatico ed Elettronico

  7. #7
    Allora. Ho provato ad inserire un immobile, la cui è descrizione era qualcosa del tipo:
    codice:
    Non è molto spazioso. Le famiglie hanno bisogno d'altri spazi.
    So che non ha senso ma almeno contiene una è e un apostrofo.

    La pagina con le query di inserimento è:
    Codice PHP:
    <?php
    #FILE CONTENENTE LE QUERY PER L'INSERIMENTO NEL DB DI UN IMMOBILE

    session_start();
    echo 
    "<meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>";
    include(
    'db.php');
    #require('utf8.php');

    if ($mex==""){
        
    #CODIFICO LE VARIABILI CHE POTREBBERO CONTENERE CARATTERI SPECIALI
        #$descrizione2 = codifica($descrizione);
        #$via2 = codifica($via);
        #$comune2 = codifica($comune);
        #NEL CASO IN CUI IL TIPO NON SIA APPARTAMENTO IL NLOCALI E IL PIANO DEVONO ESSERE NULL
        
    if (!empty($nlocali)){
            
    #INSERIMENTO IMMOBILE
            
    $result pg_query($db"INSERT INTO immobile (tipo, uso, mq, postoauto, descrizione, nlocali, piano) VALUES ('".$tipo."', '".$uso."', '$mq', '".$postoauto."', '".$descrizione."', '$nlocali', '".$piano."')");
            
    #RECUPERO ID_I
            
    $query pg_query($db"SELECT currval('immobile_id_i_seq')");
            
    $record pg_fetch_row($query);
            
    $id_i $record[0]; 
            
    #INSERIMENTO RECAPITO
            
    $rec pg_query($db"INSERT INTO recapito (id_i, via, nciv, cap, comune, provincia, regione) VALUES ('$id_i', '".$via."', '".$nciv."', '".$cap."', '".$comune."', '".$prov."', '".$reg."')");
        }else{
            
    #INSERIMENTO IMMOBILE
            
    $result pg_query($db"INSERT INTO immobile (tipo, uso, mq, postoauto, descrizione) VALUES ('".$tipo."', '".$uso."', '$mq', '".$postoauto."', '".$descrizione."')");
            
    #RECUPERO ID_I
            
    $query pg_query($db"SELECT currval('immobile_id_i_seq')");
            
    $record pg_fetch_row($query);
            
    $id_i $record[0];
            
    #INSERIMENTO RECAPITO
            
    $rec pg_query($db"INSERT INTO recapito (id_i, via, nciv, cap, comune, provincia, regione) VALUES ('$id_i', '".$via."', '".$nciv."', '".$cap."', '".$comune."', '".$prov."', '".$reg."')");
        }
        
    #INSERIMENTO PROPRIETA'
        #TROVO IL CODICE FISCALE DELL'UTENTE IN SESSIONE
        
    $query pg_query($db"SELECT codf FROM utente WHERE username='".$_SESSION['username']."' AND pw='".$_SESSION['password']."'");
        
    $record pg_fetch_row($query);
        
    $codf $record[0];    
        
    #PER ADESSO FACCIO FINTA CHE NON ESISTA LA DATA VENDITA
        
    $dataacquisizione date("d-m-y");
        
    #INSERISCO I DATI NELLA TABELLA PROPRIETA'
        
    $proprieta pg_query($db"INSERT INTO proprieta (dataacquisizione, codf, id_i) VALUES ('".$dataacquisizione."', '".$codf."', '$id_i')");
        
        
    #SE LA QUERY NON ANDASSE A BUON FINE, TORNA ALLA RELATIVA PAGINA DI INSERIMENTO IMMOBILE
        #CONTROLLI A CASCATA
        
    if (!$result){
            echo 
    "<tr><td class='testo'>Ops! C'&egrave qualcosa che non va!</td></tr>";
            if (
    $uso=='privato'){
                echo 
    "<tr><td class='testo'><form method=post action='impriv.php'><input type='submit' value='Indietro'></td></tr>";
            }elseif (
    $uso=='commerciale'){
                echo 
    "<tr><td class='testo'><form method=post action='imcomm.php'><input type='submit' value='Indietro'></td></tr>";
            }
            exit;
        }else{
            if (!
    $id_i){
                echo 
    "<tr><td class='testo'>Ops! C'&egrave qualcosa che non va!</td></tr>";
                if (
    $uso=='privato'){
                    echo 
    "<tr><td class='testo'><form method=post action='impriv.php'><input type='submit' value='Indietro'></td></tr>";
                }elseif (
    $uso=='commerciale'){
                    echo 
    "<tr><td class='testo'><form method=post action='imcomm.php'><input type='submit' value='Indietro'></td></tr>";
                }
                exit;
            }else{
                if (!
    $rec){
                    echo 
    "<tr><td class='testo'>Ops! C'&egrave qualcosa che non va!</td></tr>";
                    if (
    $uso=='privato'){
                        echo 
    "<tr><td class='testo'><form method=post action='impriv.php'><input type='submit' value='Indietro'></td></tr>";
                    }elseif (
    $uso=='commerciale'){
                        echo 
    "<tr><td class='testo'><form method=post action='imcomm.php'><input type='submit' value='Indietro'></td></tr>";
                    }
                    exit; 
                }else{
                    if (!
    $codf){
                        echo 
    "<tr><td class='testo'>Ops! C'&egrave qualcosa che non va!</td></tr>";
                        if (
    $uso=='privato'){
                            echo 
    "<tr><td class='testo'><form method=post action='impriv.php'><input type='submit' value='Indietro'></td></tr>";
                        }elseif (
    $uso=='commerciale'){
                            echo 
    "<tr><td class='testo'><form method=post action='imcomm.php'><input type='submit' value='Indietro'></td></tr>";
                        }
                        exit;    
                    }else{
                        if(!
    $proprieta){
                            echo 
    "<tr><td class='testo'>Ops! C'&egrave qualcosa che non va!</td></tr>";
                            if (
    $uso=='privato'){
                                echo 
    "<tr><td class='testo'><form method=post action='impriv.php'><input type='submit' value='Indietro'></td></tr>";
                            }elseif (
    $uso=='commerciale'){
                                echo 
    "<tr><td class='testo'><form method=post action='imcomm.php'><input type='submit' value='Indietro'></td></tr>";
                            }
                            exit;
                        }else{
                            
    header('Location: immobileinserito.php');                    
                        }
                    }
                }
            }
        }
    }



    ?>
    Purtroppo mi è uscito l'errore. Se inserisco caratteri accentati & co. non mi inserisce la query

  8. #8
    A sto punto non ho capito se il problema è l'inserimento o la codifica :S

    Comunque io non intendevo di mettere lì il codice che ti ho postato ma sulle pagine insieme agli altri meta tag...

    Il tuo problema vero qual'è a sto punto?
    CrystalSoft | Software House & Web Agency di WinRefine, Mercante in Fiera e altro...
    Annunci Zoo | Annunci gratuiti per il mondo degli Animali
    ElettroMercatino | Annunci a tema Informatico ed Elettronico

  9. #9
    Non so cos'è un Meta tag

    Il mio problema consiste in:

    quando faccio inserire a un utente un testo da form, se non ci sono caratteri speciali, l'inserimento del db va a gonfie vele. Se invece sono presenti caratteri accentati, apostrofi, punti esclamativi ecc ecc mi dà errore la query.

    Quando ho provato questa sera ad usare la funzione di codifica non avevo più problemi. Infatti riuscivo ad inserire parole accentate e le visualizzavo nel database.
    Il problema lo avevo dopo.
    Ad esempio se io mi chiamassi Lulù, riuscirei a registrarmi al sito tranquillamente e nel db sotto nome utente leggo Lulù.
    Ma quando vado nel sito alla pagina del profilo (quindi ci sono i dati che ho ripescato dal db con delle select) non leggo Lulù ma Lul+ una lettera non meglio identificata.

  10. #10
    Come soluzione tampone, usa la funzione htmlentities() per l'output dei dati...

    Es.:
    codice:
    echo htmlentities($riga["nome"]);
    Questa funzione comunque, è bene usarla per evitare problemi di XSS. Spero inoltre che controlli i dati di registrazione ecc e che non incombi in problemi di SQL Injection.

    Maggiori info e guide comunque penso che le trovi sul sito stesso di HTML.it...
    CrystalSoft | Software House & Web Agency di WinRefine, Mercante in Fiera e altro...
    Annunci Zoo | Annunci gratuiti per il mondo degli Animali
    ElettroMercatino | Annunci a tema Informatico ed Elettronico

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