Version complète: sur le forum Webmaster Hub : htmlspecialchars()
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
xpatval
Bonjour,

Je me trouve confronté à un problème d'affichage d'un texte enregistré dans
une bdd. Dans celui-ci, certains mots sont modifiés par des balises html, et
ont été insérés avec htmlspecialchars. ces balises se trouvent traduites de
la sorte: blablabla & l t;em style=& quot;color: #FF9900; & quot;& gt;mon
mot& lt;/em& gt; blibli. (j'ai mis des espaces dans les symboles converti,
craignant que le post me les retranscrive)
Lorsque je souhaite afficher ce texte, celui-ci ne dépasse pas le "=" .
(blabla<em style=) .le reste part aux oubliettes.

Comment puis-je faire afin d'éviter ce problème. (je ne peux modifier le
texte. Seulement l'afficher).

merci,

xpatval
Anonymus
Bonjour,

peux tu nous dire ce qui s'affiche exactement dans le code source ?
et ce que tu aimerais qui s'affiche sur ta page ?

merci wink.gif

ps : en utilisant les crochets, tu peux afficher le code sans problèmes. Passes par le formulaire de 'repondre', et non par 'rep.rapide', et jettes un oeil aux crochets [ + CODE + ].
xpatval
Bonjour,

En fait, mon souci se posai au niveau de l'affichage d'un texte existant, comportant des balises html codées normalement (c'est à dire avec des doubles-quotes lors de title="..." ou style="...".

j'ai résolu ce problème, sans véritablement le résoudre, je m'explique.

Le but est d'afficher certains champs (dont un texte) à des fins de modifications.

1: requête pour récupération des valeurs existantes dans le bdd afin de choisir le titre pour lequel le texte est à modifier:

CODE
<select class="form1" name="mod" onChange="submit()">
<?php
$sql = "select id_texte, id_langage, titre, texte from texte order by id_texte";
$res = mysql_query($sql);    
while ($i = mysql_fetch_array($res))
{    
    $i['titre'] = stripslashes($i['titre']);
    ?>
    <option value="<?php print $i['id_texte'] .'='. $i['id_langage'] .'='.   $i'titre'] . '=' .$i['texte'];?>" selected ><?php echo $i['titre'] ;?></option>
   <?php
}
?>    
</select>


En tête de script, j'utilise ceci pour récupérer chaque valeur choisie:
CODE
if ($mod != "") list($id_texte,$id_lg,$titre,$texte) = split("=",$mod);


Avec ce principe, je suis infoutu de récupérer la valeur complète de $texte, celle-ci étant tronquée dès la rencontre de la première double-quote de la première balise html.

2: J'ai changé d'optique, en effectuant l'oération en deux requêtes.
La première afin de sélectionner le titre.
La deuxième afin de récupérer le texte en fonction du titre et affichage.
Dans ce cas, cela fonctionne.

Je précise que le script fonctionne de la manière suivante:
1: <form><select> choix du titre </select></form>
2: <form><input> le texte à modifier </form>
3 : Update
Anonymus
Bonjour,

il semblerait que tu ais une erreur dans ta boucle while :
CODE
while ($i = mysql_fetch_array($res))
{
   $i['titre'] = stripslashes($i['titre']);
   ?>
   <option value="<?php print $i['id_texte'] .'='. $i['id_langage'] .'='.   $i'titre'] . '=' .$i['texte'];?>" selected ><?php echo $i['titre'];?></option>
  <?php
}

Je préférerais la forme suivante, qui permet de bien différencier les quotes des double quotes, ou apostrophes des guillemets (et inversement smile.gif )
CODE
while ($i = mysql_fetch_array($res))
   $i['titre'] = stripslashes($i['titre']);
   echo "<option value='".$i['id_texte'] ."=". $i['id_langage'] ."=".   $i['titre'] . "=" .$i['texte']."' selected >".$i['titre']."</option>";
}

Tu auras remarqué que j'ai ajouté le 'crochet' qu'il manque dans ton script. (Si c'est un copier/coller, c'est un 'bug'.) => $i'titre'] ?

Anonymus.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.