Salut tout le monde !

J'utilise la fonction nl2br() pour pouvoir rajouter des <br/> automatiquement quand on appuie sur la touche entré lorsqu'on poste une news. Mais le problème c'est que ca m'affiche "rn" au lieu de mettre des retours à la ligne..
Donc quand je tape :
"f
(ici c'est un entré)
f" ca va m'afficher : "frnf".
Je ne comprend pas le problème, voici ma page creer.php et news.php :
Creer.php :

<?php
require "../config.php";
    mysql_connect(DB_HOST, DB_LOGIN, DB_PASS);
    mysql_select_db(DB_BDD);
    mysql_query('SET NAMES "UTF8"');

    extract($_POST);

    if(isset($_POST'titre']) && isset($_POST'pseudo']) && isset($_POST'contenu'])){
        if(!empty($_POST'titre']) && !empty($_POST'pseudo']) && !empty($_POST'contenu'])){
            $pseudo = mysql_real_escape_string($_POST'pseudo']);
            $titre = mysql_real_escape_string($_POST'titre']);
            $contenu = mysql_real_escape_string($_POST'contenu']);
            $contenu = nl2br($contenu);
            $contenu = htmlspecialchars($contenu);
            $contenu = stripslashes($contenu);

            $sql = "INSERT INTO news (titre,contenu, pseudo) VALUES ('$titre', '$contenu', '$pseudo')";
            $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
            header("Location: index.php");
        }else{
            header('Refresh: 2;url=index.php');
            echo "Au moins un champs est vide";
        }
    }?>

Et la page news.php :

<?php
mysql_query('SET NAMES "UTF8"');

$sql="SELECT * FROM news ORDER BY id DESC";
$req= mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

while($data=mysql_fetch_assoc($req)){
        $contenu = $data'contenu'];
    $contenu = preg_replace('#\<strong>(.+)\</strong>#isU', '<b>$1</b>', $contenu); // Regex pour remplacer en <b>

    echo "<div id=\"haut_contenu\" style=\"margin-top: 15px;\">".htmlspecialchars($data"titre"])."</div>";
    echo "<div id=\"content_contenu\">".$contenu."<br/>";
    echo "<span align=\"left\">Publié le ".date("j/n/Y G:i",strtotime($data"date"]))." par ".htmlspecialchars($data"pseudo"])."</span><br/><br/><br/>";
    $sql2="SELECT id FROM comment WHERE news_id={$data"id"]}";
    $req2= mysql_query($sql2) or die('Erreur SQL !<br />'.$sql2.'<br />'.mysql_error());
        echo "Il y a <a href=\"voir_com.php?id={$data'id']}\" onclick=\"window.open(this.href); return false;\">" .mysql_num_rows($req2)." commentaires</a> <br/>";
    echo '</div>';
    echo "<div id=\"bas_contenu\"></div>";
                    }
?>

Si vous avez une idée, je suis preneur :D

2 réponses


PhiSyX
Réponse acceptée

Salut,

C'est normal, vous utilisez la fonction "mysql_espace_string" qui fait un traitement particulier.

Vous "sécurisez" $_POST'contenu'], convertissez les sauts de lignes avec nl2br pour ensuite les convertir en leur entité (?) et effacez tout les SLASH à la fin du traitement, il y a un problème en effet… :)
Vous devriez plutôt faire le contraire (sans stripslashes) !

$contenu = htmlspecialchars($_POST'contenu']);
$contenu = nl2br($contenu);
$contenu = mysql_escape_string($contenu);
Babou
Auteur

Je n'y avais pas du tout pensé :P
Merci beaucoup, ca marche maintenant !