Toon posts:

[Regexp/Ruby] Javascript uit HTML halen

Pagina: 1
Acties:

Acties:
  • 0Henk 'm!

  • van.der.schulting
  • Registratie: Juli 2002
  • Laatst online: 21-06-2021
Ik heb een HTML-string en wil daar alle javascript uit halen. Dus in feite de script tags en alles wat daar tussen zit. Ik programmeer het in Ruby, maar vraag me af of daar het probleem zit. Mijn gevoel zegt dat het in de regexp zit.

Ik heb het even getest met wat random shit en dat werkt:
code:
1
2
s1 = "<script text=>aa</script>adf<script text=>dg<\/script>"
s1.gsub(/<script(.*?)<\/script>/, "") # "adf"


Maar de echte HTML wil niet lukken....
Hieronder een gedeelte van de HTML (hele pagina posten zal niet gewaardeerd worden) :P
Sorry voor de nogal 'troeperige string'
code:
1
s = "<script type=\"text/javascript\">\n                    // Google Adsense for Search Javascript API\n                    var google_afs_request_done_executed = false;\n\n                    google_afs_query = 'nike Kleding | Heren';\n                    google_afs_ad = 'w0n8';  // specify the number of ads you are requesting\n                    google_afs_adpage = '1';  // page number\n                    google_afs_client = 'marktplaats';  // substitute your client ID\n                    google_afs_channel = 'marktplaats,View_list,L1,1776,t5,t8,n921,h822,x603'; // enter your comma-separated channel IDs\n                    google_afs_ie = 'ISO-8859-1';      // select input encoding scheme\n                    google_afs_oe = 'ISO-8859-1';      // select output encoding scheme\n                    google_afs_adsafe = 'high';  // specify level for filtering non-family-safe ads\n                    google_afs_adtest = 'off'; // set parameter to off before launch to production\n                    google_afs_hl = 'nl';      // enter your interface language if not English\n                    google_afs_gl = 'NL';      // Country\n\n                    function google_afs_request_done(google_ads) {\n                        \n                        if (google_ads.length <= 0) {\n                            return;\n                        }\n                        google_afs_request_done_executed = true;\n                        google_ad_request_done(google_ads);\n                    }\n                    </script>\n                    <script type=\"text/javascript\" src=\"http://www.google.com/afsonline/show_afs_ads.js\">\n                    </script>\n                    <script type=\"text/javascript\">\n                    if ( !google_afs_request_done_executed ) {\n                        // No data; Fall back to AFC script\n                        google_ad_client = 'ca-marktplaats_xml';\n                        google_ad_channel = 'marktplaats,View_list,L1,1776,t5,t8,n921,h822,x603,afs_fallback';\n                        google_ad_output = 'js';\n                        google_max_num_ads = '8';\n                        google_language = 'nl';\n                        google_safe = 'high';\n                        google_adtest = 'off';\n                    }\n                    </script>\n                    <script type=\"text/javascript\" src=\"http://pagead2.googlesyndication.com/pagead/show_ads.js\"></script>\n                \n            \n    \n    </body>\n</html>\n"

Als ik doe 's.gsub(/<script(.*?)<\/script>/, "")' krijg ik alle HTML terug inclusief script-tags

edit:

Ik heb dit geprobeerd, dat werkt wel, maar is voor dfe rest van mijn pagina weer juist TE rigureus: http://house9.blogspot.co...o-remove-script-tags.html
Dit gooit er ook veel HTML uit naast alleen maar de script-tags

[Voor 3% gewijzigd door van.der.schulting op 07-06-2011 15:12]


Acties:
  • 0Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 13:25

MueR

Moderator Devschuur®

is niet lief

Ik gooi deze even over de schutting naar Programming

Anyone who gets in between me and my morning coffee should be insecure.
Breng nu uw applicatie naar de kloot. Dat is veel beter! Nu samen met klootopslag. Voor maar €9,95. Doei doei!


Acties:
  • 0Henk 'm!

Anoniem: 167624

Ik hoop dat je je realiseert dat je op deze manier alleen maar script tags gaat verwijderen, dat is niet alle javascript. Vergeet alle "onLoad", "onClicK" etc. attributen niet.

Ik ben niet thuis in Ruby, maar zou het probleem de newlines kunnen zijn? Die zie ik niet terug in je kleine test en wel in the tweede string.

Acties:
  • 0Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15:30

NMe

Quia Ego Sic Dico.

Dit klinkt inderdaad als iets dat je met de DOTALL modifier fixt in andere talen. Geen idee of Ruby die ook kent.

edit:
Ja dus: http://www.regular-expressions.info/ruby.html. Gewoon /m.

[Voor 25% gewijzigd door NMe op 07-06-2011 16:20]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 00:37

alienfruit

the alien you never expected

Er is geen htmlpurifier variant voor Ruby die boel opschoont voor je?

Acties:
  • 0Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 26-05 17:59

drm

f0pc0dert

Zoals met alle security, gebruik liever whitelisting dan blacklisting; kortom: alleen dingen toestaan waarvan je zeker weet dat het geen ellende oplevert. Als je nu al niet aan html event attributen denk, dan heb je ook vast nog niet aan object en embed gedacht, laat staan behaviours in styles enz, enz. Je bent dan eigenlijk een heel groot gat in een dijk dicht aan het tapen bent met niet eens genoeg tape.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz
[ melp.nl | twitter ]


  • Rekcor
  • Registratie: Februari 2005
  • Laatst online: 31-05 14:56
Sowieso lijkt het me geen goed idee om HTML-bewerkingen te doen met reguliere expressies.

Beter is een DOM-parser te gebruiken, en dan alle nodes langs te lopen.

  • messi
  • Registratie: Oktober 2001
  • Laatst online: 23:00
Kijk eens naar de sanitize gem (https://github.com/rgrove/sanitize). Deze maakt gebruik van Nokogiri (een echte html parser) en is een stuk robuuster dan je regex.

Onze excuses voor het ontbreken van de ondertiteling.


  • Hoogie2004
  • Registratie: Mei 2005
  • Laatst online: 20:55

Hoogie2004

Whohooooo

Rekcor schreef op woensdag 08 juni 2011 @ 10:04:
Sowieso lijkt het me geen goed idee om HTML-bewerkingen te doen met reguliere expressies.

Beter is een DOM-parser te gebruiken, en dan alle nodes langs te lopen.
+1

Klassiek voorbeeld waarvoor regex eigenlijk niet bedoeld is (html parsen)

My iRacing profile | Mijnzestal.nl handboogadministratie | Strava


  • van.der.schulting
  • Registratie: Juli 2002
  • Laatst online: 21-06-2021
Thanks voor alle replies, maar uiteindelijk bleek dat ik de oplossing in de verkeerde hoek zocht. Ik had namelijk het idee dat ik een bug tegenkwam in Nokogiri en wilde het daarom zo 'basic' oplossen.

Anyhow, uiteindelijk kon ik gewoon Nokogiri gebruiken voor wat ik wilde ;)

BTW die Santize is er ook eentje om te onthouden. Zie niet direct waar ik hem kan gebruiken, maar wat ' ie kan ziet er wel goed uit ;)
Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee