Why this php code not work when tried to remove script tag? -
normally use code remove data inner img tag. it's work good.
<?php $string = "<b>test</b><img src=\"https://www.google.co.th/images/nav_logo242.png\"><script>alert();</script>"; $string = preg_replace("/<img[^>]+>/", "", $string); echo $string; ?>
then apply code remove data inner script tag. code.
<?php $string = "<b>test</b><img src=\"https://www.google.co.th/images/nav_logo242.png\"><script>alert();</script>"; $string = preg_replace("/<scrip[^>]+script>/", "", $string); echo $string; ?>
when test code it's not remove data inner script tag. why ?
your code doesn't work because you're parsing <scrip
, followed 0 or more characters other >
, followed script>
.
there no such substring in content. in $string, after <scrip
have t
(which matches [^>]+
) , have >
instead of script>
. so, no match.
here's need instead:
$string = preg_replace("/<script.*?<\/script>/si", "", $string);
you cannot use [^<]
or [^>]
because javascript code may contain many <
, >
characters itself.
here's above regex does:
• search <script
intentionally did not include closing >
bracket here, because maybe have attributed in script tag, <script type='text/javascript'>
• followed sequence of random characters, using lazy evaluation
note .*?
instead of .*
, captures little characters possible find match, instead of as possible. avoids following problem:
<script>something</script> other content <script>more script</script>
without lazy evaluation, remove everything first <script>
last </script>
• followed </script>
mark end of script section
note i'm escaping slash (\/
instead of /
) because /
regex delimiter character here. have used different character @ beginnen , end of regex, #
, , /
didn't have escaped.
• finally, added s
, i
modifiers. s
make parse multiline content. javascript code can of course contain linebreaks, , want .*?
match well. , i
make case insensitive, because assume want replace <script>
or <script>
too.
Comments
Post a Comment