Suppression d'une partie de texte

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Suppression d'une partie de texte

merci

par thegritch » 21 janv. 2006, 17:48

Merci pour ta réponse.
Je me suis apperçu que j'avais confondu le dernier paramètre de la fonction substr_replace. C'est la taille de ce que je cherche a supprimer et non le dernier caractère à supprimer.
J'ai pu trouver une fonction dans le manuel de php5 que j'ai modifié :

$contents = le texte à purger.
$format = "<span" ou encore "<div" ou "<img" etc.

function epure_balise($contents,$format){
		
		$loopcontrol = 0;
		$count = substr_count($contents,$format);	
		while(true)
		{
		   $begPos = strpos($contents,$format);
		   if ($begPos===false) break; //all tags were found & replaced.
		   $endPos = strpos($contents,">",$begPos+strlen($format));
		   $tmp = substr($contents,0,$begPos);
		   $tmp .= substr($contents,$endPos+strlen(">"));
		   $contents = $tmp;
		   if ($loopcontrol++>$count) break; //loop infinity control
		   continue;  //search again
		} 
	
		return $contents;
	}
voili voulou

@+ THEGRITCH

par Hubert Roksor » 21 janv. 2006, 17:17

Pour te simplifier la vie tu dois pouvoir utiliser une expression régulière:
$_txt_res = preg_replace('#<span.*?>#', '<span>', $_txt_res);
Désolé, je n'ai pas de tutoriel pour les expression régulière sous la main mais en bon français la commande ci-dessus signifie "capture ce qui commence par <span, suivi de 0 à x caractères quelconques .* (mais arrête-toi dès que possible ?), suivi de >". Pour la rendre insensible à la casse ("<SPAN", "<Span", etc...) ajouter "i" après le dernier "#".

Attention, ça ne veut pas dire pour autant qu'un individu malintentionné ne pourra pas rajouter du javascript dans tes tags. Si ton expression régulière a pour but d'empêcher les utilisateurs d'"injecter" du code HTML, tourne-toi vers une fonction de "validation" préconçue. (voir pear.php.net par exemple)

Suppression d'une partie de texte

par thegritch » 21 janv. 2006, 16:01

Salut,

Dans le but d'épurer du texte de balise HTML "variable" j'utilise ce type de fonction :
        $_num_debut = strpos($_txt_res,"<span");
	$_num_fin = strpos($_txt_res,">");
	$_txt_res = substr_replace($_txt_res,"",$_num_debut,$_num_fin+1); 
	
	$_num_debut = strpos($_txt_res,"<span");
	$_num_fin = strpos($_txt_res,">");
	$_txt_res = substr_replace($_txt_res,"",$_num_debut,$_num_fin+1);  


Cela fonctionne de la manière suivante :

On cherche une partie fixe de la balise, en l'occurance <span pour le début et on conserve son positionnement (caractère 5, par exemple dans la chaine de caractère)
Puis on cherche la dernière valeur de fixe de la balise, ici >

Et grace a substr_replace on détruit du premier caractère connu au dernier.

Ma fonction fonctionne parfaitement pour la première balise de type <span mais pédale dans la choucroute pour la deuxième... Voici le texte à épurer :

Code : Tout sélectionner

<span style="font-weight: bold;">balise1 balise2</span><br> <br> <span style="font-style: italic;">balise3 balise4</span><br> <br> <span style="text-decoration: underline;">balise5 balise6</span><br> <br>
Si vous avez des idées, url, suggestion je suis preneur ! :)

@+ THEGRITCH