J'ai un problème sur l'affichage d'un article de news et je n'arrive pas savoir d'où ça peut venir...
En fait, pour mes news, j'ai deux pages : une première qui appelle les 5 dernières news de ma bdd, la coupe après 450 caractères et permet d'afficher l'article complet dans une seconde page via un lien. Voilà le code de cette première page :
<?php
mysql_connect("xxx", "xxx", "xxx");
mysql_select_db("xxx");
// On récupère les cinq dernières news.
$retour = mysql_query('SELECT * FROM news ORDER BY id DESC LIMIT 0, 5') or exit(mysql_error());
while ($donnees = mysql_fetch_array($retour))
{
?>
<div class="news">
<h3>
<span class="titre_news"><?php echo $donnees['titre']; ?></span>
<span class="petit"><em>le <?php $date = $donnees['date'];
$date = explode('-',$date);
echo $date[2],'/',$date[1],'/',$date[0];
?></em></span>
</h3>
<p>
<table>
<tr>
<td id="image"><img src="<?php echo $donnees['img']; ?>" height="150" /></td>
<td id="texte"><?php
$contenu = stripslashes($donnees['contenu']);
$contenu = htmlspecialchars($donnees['contenu'], ENT_NOQUOTES, 'ISO-8859-1'); // On rend inoffensives les balises HTML que le visiteur a pu rentrer
// On fait passer notre texte à la moulinette des regex
$contenu = preg_replace('#\[b\](.+)\[/b\]#isU', '<strong>$1</strong>', $contenu);
$contenu = preg_replace('#\[i\](.+)\[/i\]#isU', '<em>$1</em>', $contenu);
$contenu = preg_replace('#\[color=(orange)\](.+)\[/color\]#isU', '<span style="color:$1">$2</span>', $contenu);
$contenu = preg_replace('#http://[a-z0-9._/-]+#i', '<a href="$0">$0</a>', $contenu);
$contenu = preg_replace('#\[url\](.+)\[/url\]#i', '<a href=\"$1\" target=\"_blank\">$1</a>', $contenu);
$contenu = preg_replace('#\[url=(.+)\](.+)\[/url\]#i', '<a href="$1" target=\"_blank\">$2</a>', $contenu);
$contenu = preg_replace("#\[img\](.+)\[/img\]#U", "<img src=\"$1\" alt=\"\" height=\"200\" />", $contenu);
$contenu = preg_replace("'\[(left|center|right|justify)\]'Ui", "<div style=\"text-align:\\1;\">", $contenu);
$contenu = preg_replace("'\[\/(left|center|right|justify)\]'Ui", "</div>", $contenu);
$contenu = preg_replace("'\[(0.90em)\]'Ui", "<span style=\"font-size:\\1;\">", $contenu);
$contenu = preg_replace("'\[/(0.90em)\]'Ui", "</span>", $contenu);
?>
<?php // Nombre de caractère
$max = 450;
$id = $donnees['id'];
$titre = $donnees['titre'];
$date = $donnees['date'];
$img = $donnees['img'];
if(strlen($contenu)>=$max)
{
// Met la portion de chaine dans $chaine
$contenu=substr($contenu,0,$max);
// position du dernier espace
$espace=strrpos($contenu," ");
// test si il y a un espace
if($espace)
// si il y a 1 espace, coupe de nouveau la chaine
$contenu=substr($contenu,0,$espace);
// Ajoute ... à la chaine
$contenu .= ' [...]';
}
?>
<?php
// On crée les entrées en HTML (<br />).
echo nl2br($contenu);
?>
<br/>
<span class="suite"><a href="http://www.monsite.com/article.php?id=<?php echo $id; ?>&titre=<?php echo $titre; ?>&date=<?php echo $date; ?>&img=<?php echo $img; ?>&contenu=<?php echo $donnees['contenu']; ?>">Lire la suite</a></span>
</td>
</tr>
</table>
</p>
</div>
<?php
} // Fin de la boucle des <italique>news</italique>.
?>
Sur cette première page, les regex et les sauts de lignes fonctionnent. Mais sur celle de l'article complet, je n'ai aucun saut de ligne qui s'effectue et les deux liens que j'ai mis se fondent en un seul. C'est-à-dire, si j'écris [ulr=monsite.com/mapage1.php]Ma page 1[/url] Blablabla Ma page 2, j'obtiens au final : Ma page 2 avec comme adresse du lien : monsite.com/mapage1.php]Ma page 1[/url] Blablabla 20%[url=monsite.com.mapage2.php.Voilà le code de cette 2e page :
<?php
mysql_connect("xxx", "xxx", "xxx");
mysql_select_db("xxx");
mysql_query('SELECT * FROM news WHERE id=\'' . $_GET['id'] . '\'') or exit(mysql_error())
?>
<div class="news">
<?php echo $id; ?>
<h3>
<span class="titre_news"><?php echo $_GET['titre']; ?></span>
<span class="petit"><em>le <?php $date = $_GET['date'];
$date = explode('-',$date);
echo $date[2],'/',$date[1],'/',$date[0];
?></em></span>
</h3>
<p>
<table>
<tr>
<td id="image"><img src="<?php echo $_GET['img']; ?>" height="175" /></td>
<td id="texte"><?php
$contenu = stripslashes($_GET['contenu']);
$contenu = htmlspecialchars($_GET['contenu'], ENT_NOQUOTES, 'ISO-8859-1'); // On rend inoffensives les balises HTML que le visiteur a pu rentrer
// On fait passer notre texte à la moulinette des regex
$contenu = preg_replace('#\[b\](.+)\[/b\]#isU', '<strong>$1</strong>', $contenu);
$contenu = preg_replace('#\[i\](.+)\[/i\]#isU', '<em>$1</em>', $contenu);
$contenu = preg_replace('#\[color=(orange)\](.+)\[/color\]#isU', '<span style="color:$1">$2</span>', $contenu);
$contenu = preg_replace('#http://[a-z0-9._/-]+#i', '<a href="$0">$0</a>', $contenu);
$contenu = preg_replace('#\[url\](.+)\[/url\]#i', '<a href=\"$1\" target=\"_blank\">$1</a>', $contenu);
$contenu = preg_replace('#\[url=(.+)\](.+)\[/url\]#i', '<a href="$1" target=\"_blank\">$2</a>', $contenu);
$contenu = preg_replace("#\[img\](.+)\[/img\]#U", "<img src=\"$1\" alt=\"\" height=\"200\" />", $contenu);
$contenu = preg_replace("'\[(left|center|right|justify)\]'Ui", "<div style=\"text-align:\\1;\">", $contenu);
$contenu = preg_replace("'\[\/(left|center|right|justify)\]'Ui", "</div>", $contenu);
$contenu = preg_replace("'\[(0.90em)\]'Ui", "<span style=\"font-size:\\1;\">", $contenu);
$contenu = preg_replace("'\[/(0.90em)\]'Ui", "</span>", $contenu);
// On crée les entrées en HTML (<br />).
echo nl2br($contenu);?>
</td>
</tr>
</table>
</p>
</div>
Quelqu'un verrait d'où peut venir le problème ?Merci d'avance pour votre aide !