Supprimer tout ce qu'il y a entre deux < >

Supprimer tout ce qu'il y a entre deux < > - PHP - Programmation

Marsh Posté le 12-05-2005 à 15:47:32    

Bonjour !
 
Je souhaite dégoter une petite fonction qui me permettrais de supprimer d'un fichier txt, tout caractere entre deux < >.
 
Exemple concret :
 
j'ai  
<table border=0 width=100>
  <tr>
      <td>Blablabla</td>
  </tr>
</table>
 
Et je voudrais récupérer que "Blablabla".
 
J'ai essayé avec une fonction eregi, en vain.
 
Merci pour le coup de main.
 
Mush

Reply

Marsh Posté le 12-05-2005 à 15:47:32   

Reply

Marsh Posté le 12-05-2005 à 15:53:14    

Reply

Marsh Posté le 12-05-2005 à 15:58:10    

ouaip, ca c sympa lol
mais je voudrais egalement supprimer ce qu'il y a entre certaines balise, genre zapper les <script></script> ainsi que ce qu'il y a a l'interieur :)
 
Mais merci de la reponse :)

Reply

Marsh Posté le 12-05-2005 à 15:59:20    

Les regexp

Reply

Marsh Posté le 12-05-2005 à 16:01:48    

sachant que je n'ai pas la possibilité de modifier le fichier txt :)

Reply

Marsh Posté le 12-05-2005 à 16:06:42    

http://fr.php.net/manual/fr/function.preg-replace.php
 
$pattern = "#<([a-z]+)>.*</\1>#Usi";
 
preg_replace($pattern , "" , $string);
 
Pour supprimer les balises et leur contenu
 
Edit : rajout du 'Us' dans le pattern ... ca evitera des soucis :D


Message édité par afbilou le 12-05-2005 à 16:29:27
Reply

Marsh Posté le 12-05-2005 à 16:13:37    

Je me permets quelques conseils pour ton site web :}

Citation :


<a href="http://www.mycreazone.com">
<div id="header"></div>
</a>


 
n'est pas valide car une balise <a> de type inline ne doit pas contenir de balise block comme <div>
 

Citation :


<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />


 
1 fois ca suffit :p
 

Citation :


<div id="menu"><div align="center">


 
tu peux faire des classes et affecter plusieurs classes a un meme element <div class="menu center"> par exemple
 

Citation :


<div id="titre">.:: Bienvenue ::.</div>


 
autant utiliser <h1> ... <h6>
C'est plus court a ecrire et c'est sémantiquement plus coherent ^^
 
Et puisque tu utilises les CSS autant ne plus mettre de "style" dans les balises non ?

Reply

Marsh Posté le 12-05-2005 à 16:17:22    

afbilou a écrit :

$pattern = "#<([a-z]+)>.*</\1>#i";
preg_replace($pattern , "" , $string);



avec ton code il va perdre le texte dans <td>Blablabla</td> par exemple...

Reply

Marsh Posté le 12-05-2005 à 16:20:45    

Bah il peut faire un striptag en permettant certaines balises comme script.
Ensuite il mouline le resultat avec "mon code" : il effacera les balises restantes et leur contenu. (byebye script)

Reply

Marsh Posté le 12-05-2005 à 16:33:01    

Merci pour tes conseils a propos de mon site afbilou :)
 
Mais je ne l'ai pas touché depuis bien longtemps et mes connaissances en css ont bien évolué depuis ;)


Message édité par Mush22 le 12-05-2005 à 16:33:25
Reply

Marsh Posté le 12-05-2005 à 16:33:01   

Reply

Marsh Posté le 12-05-2005 à 16:38:18    

Je me permettais juste de le dire parce que tu avais l'air soucieux de respecter les normes w3c (cf le lien vers le validateur sur ton site) ^^ c'est tout ^^
 
en esperant que ton probleme de PHP ait trouvé solution :)

Reply

Marsh Posté le 12-05-2005 à 16:40:48    

il trouve il trouve... mais le pti bout de code ne supprime rien du tout pour etre honnete :)

Reply

Marsh Posté le 12-05-2005 à 16:46:49    

Je viens de tester ca :
 
<?
 
$pattern = "#<([a-z]+)>.*</\1>#Usi";
 
$string = "<a href='www.google.com'>Super balbla</a> wahouuuu <script type=\"text/javascript\">var a=0;</script>";
 
$string = strip_tags($string , '<script>');
preg_replace($pattern , "" , $string);
 
echo $string;
 
?>
 
affiche : "Super balbla wahouuuu"

Reply

Marsh Posté le 12-05-2005 à 16:51:24    

afbilou a écrit :

Je viens de tester ca

t'es sur ?  ;)  
le tag script est encore là

Reply

Marsh Posté le 12-05-2005 à 17:01:42    

Moué euh ...
 

Citation :


<?
 
$pattern = '#<([a-z]+)[^>]*>.*</\1>#Ui';
 
$string = "<a href='www.google.com'>Super balbla</a> wahouuuu <script type=\"text/javascript\">var a=0;</script>";
 
$string = strip_tags($string , '<script>');
$string = preg_replace($pattern , "" , $string);
 
echo $string;
 
?>


 
na :p

Reply

Marsh Posté le 12-05-2005 à 17:06:29    

il tiens compte de la casse?
 
 
Parce que en copiant ton code, je n'ai plus les balises (striptags), mais j'ai toujours la balise script ainsi que son contenu


Message édité par Mush22 le 12-05-2005 à 17:09:06
Reply

Marsh Posté le 12-05-2005 à 17:09:22    

Non <ScRiPt>, <scipT> etc ... sont traites de la meme facon.
C'est grace a l'option i a la fin du pattern.

Reply

Marsh Posté le 12-05-2005 à 17:11:14    

Ha non cette fois tout marche :p
J'avais oublié la derniere affectation la premiere fois c'est pour ca que ca marchait pas ^^ (et le pattern est mieux maintenant)

Reply

Marsh Posté le 12-05-2005 à 17:13:09    

Reply

Marsh Posté le 12-05-2005 à 17:15:17    

Wé j'utilise -moz dans les styles ... pas envie de m'en priver :p
c'est le seul truc pas standard :)

Reply

Marsh Posté le 12-05-2005 à 17:16:31    

non mais stétune joke...  
 
Tu as édité le code du haut? ou c toujours le meme, pas corrigé?

Reply

Marsh Posté le 12-05-2005 à 17:23:30    

$string = trim($string);
$pattern = '#<([a-z]+)[^>]*>.*</\1>#Ui';
$string = strip_tags($string , '<script>');
$string = preg_replace($pattern , "" , $string);
 
Ca c mon bout de code, sachat que $string est un fichier html, en .txt

Reply

Marsh Posté le 12-05-2005 à 17:24:33    

Dans ce cas ... Met "Umsi" en parametre a la fin du pattern au lieu de Ui

Reply

Marsh Posté le 12-05-2005 à 17:27:01    

Ahhhhhhh :)  
 
C quoi la différence?

Reply

Marsh Posté le 12-05-2005 à 17:30:12    

le m va traiter la chaine comme une chaine contenant des lignes multiples.
 
et le s va permettre au "." de pouvoir matcher les \n et/ou \r
 
Et si tout ca ne marche toujours pas ... peut-etre qu'il ne faut pas mettre de 'm' en option du fait k'il y a un 's' et donc dans ce cas met 'Uis' :D

Reply

Marsh Posté le 12-05-2005 à 17:32:16    

non non c bon, parfait...
 
Par contre, est-ce qu'on peut etre un peu plus précis, et par exemple, zapper la balise et son contenu :
 
<td class="pghdrdtxt" width="2%">::</td>
<td class="pghddbltxt" width="30%">Technote</td>
 
zapper la premiere ligne, mais pas la 2eme.
 
Edit :  
 
par exemple dans le strip tags, empecher la suppression de plusieurs balises...


Message édité par Mush22 le 12-05-2005 à 17:42:03
Reply

Marsh Posté le 12-05-2005 à 18:16:02    

Tu peux preciser plusieurs balises a conserver dans le strip_tags.
 
et pour zapper seulement certain contenu ... va falloir etre plus precis et ecrire des expressions regulieres qui vont bien koi :/

Reply

Marsh Posté le 13-05-2005 à 11:33:46    

J'ai tout betement mis ca :
 
$string = strip_tags($string , '<script>','<table>','<tr>');
 
Ca n'a pas l'air de marcher...

Reply

Marsh Posté le 13-05-2005 à 11:42:46    

Mush22 a écrit :

ouaip, ca c sympa lol
mais je voudrais egalement supprimer ce qu'il y a entre certaines balise, genre zapper les <script></script> ainsi que ce qu'il y a a l'interieur :)
 
Mais merci de la reponse :)


Si ton site est XHTML valide, c'est culcul :

Code :
  1. // Ouverture doc
  2. $doc =& domxml_open_file('fichier.html');
  3. // Exemple pour les scripts
  4. $script_list =& $doc->get_elements_by_tagname('script');
  5. foreach($script_list as $script) {
  6.   $child_list =& $script->child_nodes();
  7.   foreach($child_list as $child) {
  8.     $script->remove_child($child);
  9.   }
  10. }
  11. // Sauvegarde doc
  12. $dom->dump_file('fichier.html');

Reply

Marsh Posté le 13-05-2005 à 11:47:10    

hum, ca a l'air sympa ca :)
 
Fatal error: Call to a member function on a non-object in /var/www/html/***********/achat/rec/curl.php on line 19


Message édité par Mush22 le 13-05-2005 à 11:47:58
Reply

Marsh Posté le 13-05-2005 à 11:54:14    

Citation :

Bon les mecs, on est en 2005, faudrait quand-même songer à virer ces frames et ces tableaux.


 
J'aime ces phrases :)

Reply

Marsh Posté le 13-05-2005 à 12:17:34    

:( la page n'est pas valide XHTML, ni même HTML...

Reply

Marsh Posté le 13-05-2005 à 12:23:16    

Ouch :( Du coup ça va être dur... C'est là l'interêt d'être valide : on peut triturer la structure et le contenu comme on veut...

Reply

Marsh Posté le 13-05-2005 à 12:29:21    

mouais :s, tu vois rien d'autre? :-d

Reply

Marsh Posté le 13-05-2005 à 13:09:33    

C'est toi qui ecrit le texte que tu veux filtrer ? ou bien ce sont les utilisateurs de ton site via un forum/livre d'or ?
 
Si c'est toi l'auteur ... tu peux mettre des marqueurs dans les balises a virer ou a conserver ! Par exemple mettre dans l'attibut title un genre de : title="rm"
 
En filtrant ton fichier tu vas pouvoir virer les balises specifiques ayant l'attribut title a "rm" par exemple.
 
http://www.php.net/manual/fr/ref.domxml.php


Message édité par afbilou le 13-05-2005 à 13:10:13
Reply

Marsh Posté le 13-05-2005 à 13:15:16    

Il pourra rien faire avec domxml, vu que c'est pas valide :( cf. ma solution

Reply

Marsh Posté le 13-05-2005 à 13:53:10    

je n'ai aps acces au fichier texte autrement que par un curl ou fgetss, et ce n'est pas moi qui le génére non plus.
C'est la le probleme, par contre, il y a des balises récurante, qui reviennent toujours au meme endroit (type <td style="blabla"[...]></td> ), et c'est ces balises meme que je souhaite récupérer.

Reply

Marsh Posté le 16-05-2005 à 12:47:47    

Disons pour etre précis, que dans cette page, je ne veux récupérer que le contenu de la balise :
<TABLE width="80%" class="blabla"></table>
 
Comment je m'y prends?

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed