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("<", "<", ($_POST['body']));
$_POST['body'] = str_replace(">", ">", ($_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 <strong>prova</strong>
Il problema è che nel codice xhtml i caratteri < ed > 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 <strong>prova</strong>.
Praicamente mi traduce il segno < e > correttamente con < ed > ... ma se provo a tradurre questi caratteri con str_replace, la & viene separata dal resto e letta come & !
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?