Du contenu HTML en attribut

Notion de base, un attribut

En XML (et donc par voix de conséquence, en HTML) un attribut se définit comme suit :
nom=“valeur”
où le nom identifie l'attribut et la valeur son contenu. La valeur est toujours entre guillemets. Pour cette raison, il est impossible de stocker du contenu aillant un ou plusieurs guillemets.
exemple de code invalide :

php
echo '<input type="text" name="exemple" value="blah "blah" blah"/>';
//ou encore :
$value='blah "blah" blah';
echo '<input type="text" name="exemple" value="'.$value.'"/>';

Ce type de code provoque typiquement un affichage totalement erroné.

Pallier au problème

Evidemment il existe une solution simple : ne pas mettre de guillemet !
Je vous vois déjà dire : Mais je ne peux pas faire autrement !
Rassurez vous, ne pas en mettre ne signifie pas “ne pas en avoir”.
L'HTML prévois un encodage particulier pour les caractères particuliers.

Exemple :
é pour &eacute;
à pour &agrave;
ô pour &ocirc;
et j'en passe. (une bonne liste se trouve ici : http://www.digitalmediaminute.com/reference/entity/index.php)

En cherchant on trouve que ” remplace ”. Une solution serait donc de remplacer tous les ” par ” exemple :

php
$value=str_replace('"',""",'blah "blah" blah');
echo '<input type="text" name="exemple" value="'.$value.'"/>';

Php propose d'ailleurs des fonctions capablent de remplacer tous les caractères spéciaux par leur équivalent HTML :

Mais il y a mieux.

rawurlencode

Peu connu et peu utilisé, rawurlencode “retourne une chaîne dont tous les caractères non alphanumériques (hormis-_.) auront été remplacés par des séquences %xy (%), avec xy, deux valeurs hexadécimales.”
Ce qui signifie que :

php
$value=rawurlencode('blah "blah" blah');
echo $value;

affichera :
blah%20%22blah%22%20blah
Et ceci nous convient parfaitement ! Donc :

php
$value=rawurlencode('"',""",'blah "blah" blah');
echo '<input type="text" name="exemple" value="'.$value.'"/>';

fonctionne parfaitement.

Exploiter le retour...

Il est vrai que maintenant vous vous trouvez avec “blah%20%22blah%22%20blah” et c'est tous de même moins compréhensible. Pour revenir a votre chaîne originale, utiliser l'opposé de rawurlencode, à savoir : rawurldecode

php
$value="blah%20%22blah%22%20blah";
echo rawurldecode($value);

affichera :
blah “blah” blah

Equivalence javascript

Il se peut que vous ailliez besoin d'utiliser ce contenu en javascript.
Il est donc bon de savoir ceci :

  • en javascript, escape() fait la même chose que rawurlencode()
  • en javascript, unescape() fait la même chose que rawurldecode()

—-


28/08/2006 22:18 -

iDo –