Visualizzazione risultati 1 fino 6 di 6

Discussione: Set di caratteri

  1. #1
    zeropescadale non è connesso Neofita
    Data registrazione
    10-09-2020
    Messaggi
    4

    Predefinito Set di caratteri

    Ciao a Tutti,
    ho un problema con una stampa a video del valore contenuto in un campo del mio db

    nello specifico:
    io ho la necessità di scrivere in questa cella del mio db un determinato testo in formato HTML (può contenere elementi come <ul><b>etc.)
    Il problema?
    se io lo scrivo manualmente nel db e poi vado a richiamare il contenuto tramite query e faccio una echo il contenuto viene visualizzato perfettamente
    Se invece lo stesso identico contenuto lo scrivo nel db tramite query quando vado a fare la echo lo vedo con i caratteri HTML quindi non decodificato

    Come posso risolvere?

    Vi lascio di seguito i miei script:
    Codice PHP:
    #query per la scrittura:
    $sql = "UPDATE `servizi` SET `nome`='" . $nome_prodotto .
    "',`marca`='" . $marca_nuova .
    "',`prezzo`='" . $prezzo_prodotto .
    "',`quantita_lotto`='" . $quantita_prodotto .
    "',`evidenza`='" . $evidenza .
    "',`disponibile`='" . $stato_prodotto .
    "',`descrizione_breve`='" . $descrizione_breve .
    "',`descrizione`='" . $descrizione_lunga_modificata .
    "' WHERE id='" . $id_prodotto . "'";
    Codice PHP:
    #richiamo della cella
    $sql_due = "SELECT * FROM servizi WHERE id='".$_GET['id_prodotto']."'";
    $risultato_servizio = $mysqli -> query($sql_due);
    $num_rows = $risultato_servizio->num_rows;


    while (
    $row = $risultato_servizio->fetch_array(MYSQLI_ASSOC)) {
    #[...]
    $descrizione_prodotto=$row['descrizione'];
    }
    echo
    "<p>".$descrizione_prodotto."</p>";
    vi lascio anche una pagina di esempio con il testo scritto dalla quary: http://zeropescadale.altervista.org/...id_prodotto=26
    una pagina di esempio con il testo scritto nel db a mano: http://zeropescadale.altervista.org/...id_prodotto=31
    Ultima modifica di dreadnaut : 13-09-2020 alle ore 12.28.43 Motivo: + spazi per leggibilità

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Probabilmente prima di inserire i dati tramite query usi funzioni come htmlentities. In questo caso hai due strade:
    1. effettua le operazioni inverse dopo aver recuperato i dati, per esempio
      Codice PHP:
      $descrizione_prodotto = html_entity_decode($row['descrizione']);
    2. non effettuare conversioni prima della scrittura, delega la sanificazione dell'input all'uso di prepared_statement (preferibile)

    I suggerimenti che do più spesso:


  3. #3
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    Usa i Preparated Statement e converti ogni possibile carattere in entità html.
    Codice PHP:
    $str = htmlentities('<p>io sono un testo è per test</p>', ENT_COMPAT | ENT_HTML401, 'UTF-8');
    //Non inserire tale testo in un un'elemento CDATA altrimenti verrà espanso alla rappresentazione normalizzata.
    $new_str = htmlspecialchars_decode($str, ENT_COMPAT | ENT_HTML401); //occorre una regex per stabilire quali elementi sono idonei da convertire ma in questo esempio converto tutti i caratteri.
    //rimuovi perfettamente solo gli elementi correttamente annidati.
    $text = strip_tags($new_str);
    echo
    $text;
    Ovviamente se non è nel range della codifica in uso (UTF-8 nel mio esempio ovviamente il testo, pagina html e connessione al database dovrebbe essere in UTF-8) la funzione restituirà false.
    EDIT2 sarebbe più corretto memorizzare nel database senza elementi html (entità html o non) , quindi da 'io sono un testo è per test' a 'io sono un testo &egrave; per test' e poi creare una funzione a secondo del contesto in uso, cioè che aggiunge l'elemento da te voluto '<p>io sono un testo &egrave; per test</p>'.
    Ultima modifica di darbula : 13-09-2020 alle ore 15.19.22

  4. #4
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Citazione Originalmente inviato da zeropescadale Visualizza messaggio
    Ciao a Tutti,
    Se invece lo stesso identico contenuto lo scrivo nel db tramite query quando vado a fare la echo lo vedo con i caratteri HTML quindi non decodificato
    Cosa intendi con "i caratteri HTML"? Il codice con i tag HTML (<p>...<ul>), oppure alcuni caratteri convertiti in "HTML entities" (&egrave;, etc)?

    Entrambe le pagine che hai postato non hanno né uno né l'altro, per quando vedo ¯\_(ツ)_/¯

  5. #5
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    Cosa intendi con "i caratteri HTML"? Il codice con i tag HTML (<p>...<ul>), oppure alcuni caratteri convertiti in "HTML entities" (è, etc)?

    Entrambe le pagine che hai postato non hanno né uno né l'altro, per quando vedo ¯\_(ツ)_/¯
    Stamattina la seconda pagina mostrava i tag HTML, probabilmente l'ha già modificata .

    I suggerimenti che do più spesso:


  6. #6
    GraphOGLRisorse non è connesso AlterGuru 2500
    Data registrazione
    14-02-2015
    Messaggi
    4,288

    Predefinito

    Salve,
    l'utnte si riferiva ai tag html, confermo che prima nella prima pagina messa come esempio, si vedevano mentre ora no. Probailmente zeropescadale ha risolto il problema, approtando le adeguate modifiche sulla base dei suggerimenti forniti da mzanella e darbula.

    Cordiali saluti.

Regole di scrittura

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