Aller au contenu

htmlspecialchars()


Sujets conseillés

Posté

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

Posté

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 ;)

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 + ].

Posté

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:

<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:

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

Posté

Bonjour,

il semblerait que tu ais une erreur dans ta boucle while :

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 :) )

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.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...