OVH Cloud OVH Cloud

regexp strip HTML

6 réponses
Avatar
pere.noel
j'ai une regexp qui enlève les balises html :

/<[^>]*>/

ça marche bien MAIS ça laisse le texte des fonctions javascript entre
<script et </script>, ce que je souhaite supprimer, aussi j'ai ajouté
une autre regexp :

/\A.*<body[^>]*>(.*)<\/body>\s*\Z/

(dans le jargon ruby \A c'est le début \Z la fin.

bon, cette rehexp me garde néanmoins ce qui se trouve dans </script>...

--
une bévue

6 réponses

Avatar
pere.noel
José Campos <jose.campos+ wrote:

Que donne (sans les guillemets) :
Find: "<script[^>]*>((.|n)(?!/script))+</script>"
Replace: ""


Stack overflow in regexp matcher:
/<script[^>]*>((.|n)(?!/script))+</script>/xn ))))


je rigole ;-)

oui, toi tu choisi de supprimer ce qu'il y a avec <script/>

c'est tjs pour la détection d'encodage....

il y a des trucs qui marcheraient mais pas avec le html à cause de
l'us-ascii, donc en supprimant tous les tags et si poss les scripts ça
devrait marcher...
--
une bévue

Avatar
pere.noel
José Campos <jose.campos+ wrote:


Ton message initial me laissait penser que tu voulais supprimer tout
ce qui était entre <script> et </script>, y-compris ces deux balises. Me
trompe-je?


non, mais comme les scipts sont généralement dans le <HEAD/>, il est
vrai qu'il y en qq fois dans le <BODY/> voire dans une <DIV/>...

mais j'ai eu ça quand même, pour de vrai :
Stack overflow in regexp matcher:
/<script[^>]*>((.|n)(?!/script))+</script>/xn ))))


c'est tjs pour la détection d'encodage....

il y a des trucs qui marcheraient mais pas avec le html à cause de
l'us-ascii, donc en supprimant tous les tags et si poss les scripts ça
devrait marcher...


Ne peux-tu pas faire en deux passes? Une première pour les scripts
et une deuxième pour les balises?

Find; "<[^>]+>" Replace: ""


ben oui, je fais ça en deux passes :

self.gsub(BODY_RE, '').gsub(TAGS_RE, '')

mon body ne marche pas +, pige pas pourquoi, tiens au fait je suis
parvenu à interfacer ruby et php ))

#!/usr/bin/env php
<?php
$name = fgets(STDIN);
fwrite(STDOUT, "<encoding>" .
mb_detect_encoding(file_get_contents($name), "ISO-8859-1, ISO-8859-15")
. "</encoding>");
exit(0);
?>


et en ruby je fais (c'est du shell en fait):

result=`php check_files.php; echo #{filename}`.chomp

je suis juste obligè d'entourer la réponse de php par "<encoding>" et
"</encoding>" passeke ça me retourne la réponse de php et le filename
envoyé par ruby...


mais bon, j'ai été déçu par leur binz "mb_detect_encoding" ...

quant à perl, je ne suis pas arrivé à le faire marché, ça râle load
iso-8859-1 etc...


en fait bientôt je saurais faire pour le décodage d'encodage chinois,
japonais, bielorusse etc... mais juste couci-couça pour western
european...

ce matin j'avais trop de mac-roman, maintenant je n'en ai plus assez...
--
une bévue


Avatar
pere.noel
FiLH wrote:


lynx -dump


ouais, merci, bonne idée, j'aurais pas pensé à lynx...

mais bon il laisse quand même des :
[puce0.jpg] [7]Catalogue

et des :

14. http://www.harmattan.fr/index.asp?navigÊtalogue&sr=7


oeuf corse ;-)

et puis tout le monde n'a pas lynx, le mien est dans /opt ...
--
une bévue

Avatar
filh
Une bévue wrote:

j'ai une regexp qui enlève les balises html :



lynx -dump

FiLH
--
Le fondement du constat bourgeois, c'est le bon sens, c'est-à-dire
une vérité qui s'arrête sur l'ordre arbitraire de celui qui la parle.
Roland Barthes.
http://www.filh.org

Avatar
pere.noel
José Campos <jose.campos+ wrote:

je suis (presque) à jeun et ne
comprends vraiment pas ce que tu veux faire. ;-)



ben si, tu as très bien compris, je veux bien enlever tout le contenu de
<script/>, après dans une deuxème passe tous les tags.
d'ailleurs je pense l'utiliser aussi pour supprimer tous les css inclus
dans la page.

Ici, dans TextMate, je capture tous les <script...</script>, qu'ils
soient dans <head>...</head> ou dans <body>...</body> avec :

<script[^>]*>((.|n)(?!/script))*</script>
mais avec ruby ce regexp me donne :

RegexpError: Stack overflow in regexp matcher:
/<script[^>]*>((.|n)(?!/script))*</script>/xn


mais ça ne couine pas à tous les coups, ça couine sur un fichier qui est
comme ça, pour les scripts :
<script type="text/javascript"
src="Mac-roman-utf-8_fichiers/wikibits.js"><!-- wikibits js --></script>
<script type="text/javascript"
src="Mac-roman-utf-8_fichiers/index.php"><!-- site js --></script>
<style type="text/css">/*<![CDATA[*/
@import
"/w/index.php?title=MediaWiki:Common.css&action=raw&ctype=text/css&smaxa
ge&78400";
@import
"/w/index.php?title=MediaWiki:Monobook.css&action=raw&ctype=text/css&sma
xage&78400";
@import "/w/index.php?title=-&action=raw&gen=css&maxage&78400";
/*]]>*/</style></head><body class="ns-0 ltr">

et aussi :
<script type="text/javascript"> if (window.isMSIE55) fixalpha();
</script>
dans au moins deux <div/> de <body/>

bon en général, quand il y a un stack overflow, ça touche à la
récursivité.

bon il faut que je regarde de plus près ta regexp...
--
une bévue

Avatar
pere.noel
José Campos <jose.campos+ wrote:


Si ça ne relève pas de l'intimité, pourrais-tu me faire passer ce
fichier? Je ne vois rien qui butte sur les extraits que tu as donnés.


non pas du tout, je t'envoie l'ensemble du folder concerné, duement
comapacté, mais sans les sous-dossiers d'images attachés à chaque
fichier html.
--
une bévue