Athos99, PHP et développement WEB

Un site consacré au développement web en php

Trimer les caractères insécables

Date: 
6 fév 2012

Le caractère insécable (&nbsp) du HTML, n'est pas équivalent au code espace. La fonction trim du php ne sait pas le traiter.

Voici un petit exemple :

Je récupère une saisie d'un texte qui peut contenir des balises HTML et entité HTML (par exemple : &acute ou  );

Un petit exemple :

// le sting à transformer 
$str = " &nbsp;<i>xx</i>aaaa&nbsp;"; 

// j'enlève les tags 
// $text contiendra  '&nbsp;xxaaaa&nbsp;' 
$text = strip_tag($str); 

// je décode les entités en convertissant en UTF-8    
// text contiendra ' xxaaaa'  
$text = html_entity_decode($text,ENT_QUOTES,'UTF-8'); 

// je trim le text pour enlever tout ce qui 
// commence ou finit par un blanc  
$text = trim($text);

// $text contient ' ' (2 espaces insécables)

La variable texte contient deux espaces , apparemment le trim n'a pas été éxécuté !

La raison est toute simple,' &nbsp;' est un caractère insécable et trim ne peut le traiter. Il a été transformé par la fonction html_entity_decode en une séquence de deux codes ASCII 194 et 162  ou C2 et A0 en hexadécimal. Il n'est pas possible de passer cette séquence "\xC2\xa0" en deuxième paramètre de la fonction trim, car le deuxième paramètre optionnel de la fonction trim ne traite que les caractère ASCII et non une séquence.

Solution

Pour résoudre ce problème, avant d'effectuer un trim, je remplace tous les espaces inscéables avec la fonction str_replace en rempalçant la séqeunce "\xc2\xa0" par un espace.

$text = str_replace("\xc2\xa0",' ',$text);

 

Rubrique: 
Trucs et astuces
Tags: 
trim
utf8