Toon posts:

[JavaScript] Replace functie, script tags stripn. wil niet

Pagina: 1
Acties:
  • 159 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo ik gebruik de volgende code om 3 javascripts (<script></script> tags) uit een string te strippen, deze string staat in een textarea met id="Artikelen":

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script language="JavaScript" type="text/javascript">

var broncode = document.getElementById("Artikelen").value;

    broncode = broncode.replace(/<script(.*?)<\/script>/g, "");
    broncode = broncode.replace(/<script(.*?)<\/script>/gi, ""); 
    broncode = broncode.replace(/<script(.*?)<\/script>/i, ""); 
    broncode = broncode.replace(/<script LANGUAGE='JavaScript'>(.*?)<\/script>/g, ""); 
    broncode = broncode.replace(/<script LANGUAGE='JavaScript'>(.*?)<\/script>/gi, ""); 
    broncode = broncode.replace(/<script LANGUAGE='JavaScript'>(.*?)<\/script>/i, ""); 

    document.write(broncode);

</script>


De eerste twee scripts krijg ik er prima tussenuit, echter het volgende stukje script kan ik met bovenstaande code niet uit mijn string strippen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<script LANGUAGE='JavaScript'>
    function ShowFloatingImageWindow(anchor, url)
    {
        var fltwin = document.getElementById('FloatWindow');
        var title = document.getElementById('FloatWindowTitle');
        var closeBtn = document.getElementById('FloatingWindowCloseBtn');
        var img = document.getElementById('FloatWindowImg');
        fltwin.parentNode.removeChild(fltwin);
        img.src = url;
        fltwin.style.position = 'absolute';
        fltwin.style.zIndex = 10;
        fltwin.onclick = HideFloatingImageWindow;
        closeBtn.onclick = HideFloatingImageWindow;
        fltwin.style.display='block';
        title.innerText = anchor.alt;
        anchor.parentNode.appendChild(fltwin);
    }
    function HideFloatingImageWindow()
    {
        var fltwin = document.getElementById('FloatWindow');
        fltwin.parentNode.removeChild(fltwin);
        fltwin.style.display='none';
        document.body.appendChild(fltwin);
    }
</script>


Mijn vraag is dan ook, wat gaat er hier fout, de code is volgens mij prima, van de drie scripts in mijn string kan ik er namelijk twee uit halen. Overigs gaat het hier om een workarround want alles wat in het textarea veld met id="Artikelen" staat komt uit een ASP functie.

Imand enig idee hoe ik dit kan oplossen? _/-\o_

  • Juup
  • Registratie: Februari 2000
  • Niet online
Tjonge wat doe je toch moeilijk. Waarom niet gewoon:
JavaScript:
1
var broncode = document.getElementById("Artikelen").value.replace(/<script([.\n]*?)<\/script>/ig, "");

(ongetest)

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


Verwijderd

Topicstarter
Juup schreef op donderdag 12 juli 2007 @ 11:52:
Tjonge wat doe je toch moeilijk. Waarom niet gewoon:
JavaScript:
1
var broncode = document.getElementById("Artikelen").value.replace(/<script([.\n]*?)<\/script>/ig, "");

(ongetest)
Helaas werkt je code ook niet, het heeft waarschijnlijk met de opmaak van het script te maken dat ik eruit wil strippen, mischien is het zelfs een Javascript BUG. Zowel jouw code als die van mij stript andere script tags wel, maar niet die ik hierboven heb beschreven.

Mvg 8)7

  • funkwurm
  • Registratie: December 2005
  • Laatst online: 22-02-2021
Kun je de andere 2 scripts die wel gefilterd wordt ook geven? Dan kunnen we het verschil ontdekken misschien.

en ik zie dat je \n gebruikt, onder windows is het \r\n voor regelafbreuk. (en voor de volledigheid, onder linux \n en onder Mac OS X \r)

  • Juup
  • Registratie: Februari 2000
  • Niet online
Ja wat funkwurm zegt. Dus zo:
JavaScript:
1
var broncode = document.getElementById("Artikelen").value.replace(/<script[.\r\n]*?\/script>/ig, "");

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

In sommige implementaties matched de . (dot) ook de carriage return (\r) niet

Note overigens dat een . (dot) in een characterclass een letterlijke punt matched, je regexp zou dus eerder zoiets moeten zijn:
code:
1
/<script(.|[\r\n])+?<\/script>/gi

of zo:
code:
1
/<script[\s\S]+?<\/script>/gi

[ Voor 60% gewijzigd door crisp op 12-07-2007 23:17 ]

Intentionally left blank

Pagina: 1