Page 1 sur 1

réecriture de caractères spéciaux en entités html mais pas t

Posté : 21 juil. 2009, 16:02
par enneite
je veux creer une fonction de reecriture d'entités HTML
Je ne veux/pas utiliser htmlentities() car je récupère des tables de BDD dont certaines cellules contiennent du HTML
(typiquement du ><img src="http://adresse?id=nom&id2=nom2" width="1" height="1"> ...)
et je ne veux pas que cela me le transforme en
<img src="adresse?id=nom&id2=nom2" width="1" height="1">

Mais je veux quand même faire un transtypage d'accents principalement, voir d'autres entités html ne s'utilisant pas dans le langage ( autre que <,>," ...)
.
Alors la j'ai deux fncts possibles :
function texte_to_html($chaine)
{
$sortie=$chaine;                
$sortie=str_replace("à","&agrave;",$sortie);
	$sortie=str_replace("â","&acirc;",$sortie);
	$sortie=str_replace("ä","&auml;",$sortie);
	
	$sortie=str_replace("ç","&ccedil;",$sortie);
	
//...

	//Le code peut aller de 20 à 250 lignes en fonction 
               // des caracteres qu'on y met (on peut choisir de ne mettre que les plus frequents)

// ....
	$sortie=str_replace("€","&euro;",$sortie);
	$sortie=str_replace("'","&rsquo;",$sortie);
	$sortie=str_replace("’","&rsquo;",$sortie);
	$sortie=str_replace("«","&laquo;",$sortie);
	$sortie=str_replace("»","&raquo;",$sortie);

return $sortie;
}

//DEUXIEME METHODE

function texte_to_html($chaine)
{
$sortie=$chaine;                
$sortie=htmlentities($sortie) ;
	$sortie=str_replace("<","<",$sortie);
	$sortie=str_replace(">",">",$sortie);
	$sortie=str_replace("&","&",$sortie);
	


// mais là aussi, je risque d'oublier quelques elements à retranscrire en sens inverse comme ici :
//$sortie=str_replace(""",'"',$sortie);

//et puis certains caracteres speciaux ne sont pas pris en compte par htmlentities du coup faut peut être remettre un peu du code de la fonction 1...
$sortie=str_replace("'","&rsquo;",$sortie);
	$sortie=str_replace("’","&rsquo;",$sortie);
	$sortie=str_replace("«","&laquo;",$sortie);
	$sortie=str_replace("»","&raquo;",$sortie);

return $sortie;
}


bref, c'est du bidouillage.
Peut-on se passer des utilisations repetitives de str_replace()?
demandent -elles bcp de ressource ?
vous me conseilleriez la 1ere ?
la seconde ?
une troisième?