| 
Vendre, Acheter, Echanger
 | 
 
| 
 | 
 
 
 | 
 
  
  | 
  | 
PHP 4: 5 astuces utiles pour manipuler du code HTML  
 
1) Placer le contenu d'un fichier HTML 
dans une chaîne 
On utilise pour cela les fonctions file() et join(). 
La première place le contenu d'un fichier dans un tableau, 
la seconde joint toutes les entrées de ce tableau. 
 
Exemple: 
 
$fichier="http://developpeurs.journaldunet.com"; 
$contenu=join("",file($fichier)); 
 
Le "liant" des différentes entrées entre 
elles est spécifié en premier argument de la fonction 
join(). Ici, on utilise une chaîne vide. 
 
2) Isoler un contenu situé entre 
deux balises HTML de commentaire 
Il peut s'agir, par exemple, de placer dans une base de données 
divers éléments d'une page HTML, repérés 
par des balises de commentaires. 
On utilise alors l'expression régulière suivante: 
 
<!--[nom de la balise de début]-->(.*)<--[nom 
de la balise de fin]-->> 
 
pour récupérer le contenu en question. 
Le caractère . (point) désigne n'importe quel caractère 
(sauf le caractère de fin de ligne), tandis que le caractère 
* (multiplié par) signifie que ce qui précède 
(en l'occurence, un caractère, quel qui soit sauf le caractère 
de fin de ligne) peut apparaître zéro, une, ou un nombre 
quelconque de fois. Les parenthèses, enfin, servent à 
isoler le contenu figurant entre les balises définies, afin 
de le récupérer facilement par la suite. 
 
Exemple: 
 
$texte="<!--debut du titre de l'article-->Utiliser 
des <b>regexp</b> <i>via</i> PHP<!--fin 
du titre de l'article-->"; 
eregi("<!--debut du titre de l'article-->(.*)<!--fin 
du titre de l'article-->", $texte, $regs);  
$titre=$regs[1]; 
 
La fonction PHP utilisée ici est eregi(), permettant 
d'appliquer à une chaîne (deuxième argument) 
une expression régulière (premier argument) indépendante 
de la casse (c'est le sens du i de eregi), et de récupérer 
le résultat dans le tableau $regs. 
 
3) Supprimer sélectivement certaines 
balises  
Une fonction PHP, strip_tags(), nous rend ce service, et 
se montre particulièrement puissante puisqu'elle permet de 
sélectionner les balises que l'on ne veut pas supprimer. 
 
Exemple: 
 
$texte="<span class=\"titre\">Utiliser des 
<b>regexp</b> <i>via</i> PHP</span>"; 
$texte=strip_tags($texte,"<b><i>"); 
 
où la balise <span> 
sera supprimée, mais ni la balise <b>, ni la 
balise <i> (notez la syntaxe du second argument de 
la fonction). 
 
4) Gérer les caractères spéciaux 
HTML  
Il s'agit des caractères comme é (é), 
à (à), & (&), etc. Là 
encore, une fonction PHP nous permet de remplacer tous les caractères 
dont il existe une "entité" équivalente 
en HTML en cette entité. 
 
Exemple 1: 
 
$texte="gérer les caractères"; 
echo htmlentities($texte); 
 
Exemple 2: faire l'inverse 
 
function unhtmlentities($string){ 
   $trans_tbl = get_html_translation_table(HTML_ENTITIES); 
   $trans_tbl = array_flip($trans_tbl); 
   return strtr($string, $trans_tbl); 
} 
 
Le deuxième example récupère les données 
de conversion caractère-entité du HTML sous forme 
de tableau associatif dont les clés sont les caractères 
et les valeurs les entités. En "renversant" l'association 
(les clés deviennent valeurs et vice-versa), on peut appliquer 
à une chaîne la fonction strtr() qui traduit, 
dans une chaîne, une série de sous-ensembles par une 
série d'autres, les paires étant spécifiées 
par un tableau associatif. 
 
5) Insérer du texte sans erreur dans 
une base MySQL 
Le problème se pose lorsque le texte qui doit être 
inséré via PHP dans une base MySQL comprend 
des caractères comme " (double quote) ou ' (simple quote). 
Dans ce cas, une fonction "clé en main" existe 
pour "préparer" le texte à l'insertion: 
il s'agit de mysql_escape_string(), qui s'applique à 
la chaîne concernée. 
 
Exemple: 
 
$texte="Moins d'erreurs avec PHP"; 
$connect=mysql_connect("serveur","identifiant","motdepasse"); 
mysql_select_db("table",$connect); 
$requete_sql="INSERT INTO matable (texte) VALUES ('".mysql_escape_string($texte)."')"; 
mysql_query($requete_sql,$connect); 
mysql_close($connect); 
 
On évite ainsi l'échec de l'insertion dans la base, 
causée par une requête qui prend la forme suivante: 
 
INSERT INTO matable (texte) VALUES 'Moins 
d'erreur avec PHP  
 
[Jérôme 
Morlon (JDN), 23 mai 2002 
, JDNet] 
 
 |