Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    HELP con inserimento tag html in mysql!

    Ciao a tutti. Spero che qualcuno possa aiutarmi con questo problema, perché ci sto impazzendo da ore.
    Dunque, ho creato un piccolo CMS in php con un semplicissimo form dal quale l'utente può inserire testo che sarà visualizzato nel sito. Ci sono anche alcuni pulsanti in js per il bold, italic e sottolineato.

    Il problema è l'inserimento dei tag html nel database mysql e la loro successiva interpretazione come tag e non come testo...

    Questo è il mio codice, dove $_POST['body'] è il contenuto della textarea:


    if(isset($_POST['title']) and isset($_POST['body']) and isset($_SESSION['user_id'])) {

    $_POST['body'] = str_replace("<", "&lt;", ($_POST['body']));

    $_POST['body'] = str_replace(">", "&gt;", ($_POST['body']));


    $sql = "INSERT INTO cms_articles (title, body, author_id, date_submitted) VALUES ('".$_POST['title']."', '".mysql_real_escape_string($_POST['body'])."', ". ...altri dati... ";

    ecc...


    Se inserisco il testo : Questa è una prova, il risultato visualizzato è:

    Questa è una &lt;strong&gt;prova&lt;/strong&gt;

    Il problema è che nel codice xhtml i caratteri &lt; ed &gt; vengono visti come & amp;lt; ed & amp;gt !!! Cioè: & amp;lt;strong& amp;gt;prova& amp;lt;/strong& amp;gt; (lascio uno spazio tra & ed amp solo per visualizzarlo nel forum)

    Non capisco perché...


    Se invece tolgo i due str_replace, il risultato è:

    Questa è una prova.
    Infatti l'xhtml corrispondente è: Questa è una &lt;strong&gt;prova&lt;/strong&gt;.

    Praicamente mi traduce il segno < e > correttamente con &lt; ed &gt; ... ma se provo a tradurre questi caratteri con str_replace, la & viene separata dal resto e letta come &amp; !

    Sembra un circolo vizioso da cui è impossibile uscire, ma sulla guida di html.it ho trovato proprio quelle due istruzioni str_replace che ho inserito nel primo esempio.

    Come posso uscirne?

  2. #2
    Vuoi che il testo appaia come HTML formattato (con grassetti etc.)?

    Se la risposta è si, togli gli str_replace()

    Inoltre, ti suggerisco vivamente, di prendere le precauzioni suggerite nella guida sulla sicurezza:

    http://php.html.it/guide/lezione/2986/sql-injections/

  3. #3
    Alla fine ho risolto. Il problema era nel codice di output, dove avevo inserito la funzione htmlspecialchars per stampare a video il testo. E' stato sufficiente aggiungere un html_entity_decode per risolvere il problema:

    Questa è la soluzione:

    echo nl2br(html_entity_decode (htmlspecialchars(trimBody($row['body']))));

    Viene lo stesso risultato anche semplicemente togliendo htmlspecialchars, ma devo fare delle prove per scoprire se non ci siano altri inconvenienti.

    Grazie comunque,


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