PHP Удалить JavaScript
Я пытаюсь удалить JavaScript из HTML.
Я не могу заставить регулярное выражение работать с PHP; это дает мне нулевой массив. Почему?
<?php
$var = '
<script type="text/javascript">
function selectCode(a)
{
var e = a.parentNode.parentNode.getElementsByTagName(PRE)[0];
if (window.getSelection)
{
var s = window.getSelection();
if (s.setBaseAndExtent)
{
s.setBaseAndExtent(e, 0, e, e.innerText.length - 1);
}
else
{
var r = document.createRange();
r.selectNodeContents(e);
s.removeAllRanges();
s.addRange(r);
}
}
else if (document.getSelection)
{
var s = document.getSelection();
var r = document.createRange();
r.selectNodeContents(e);
s.removeAllRanges();
s.addRange(r);
}
else if (document.selection)
{
var r = document.body.createTextRange();
r.moveToElementText(e);
r.select();
}
}
</script>
';
function remove_javascript($java){
echo preg_replace('/<script\b[^>]*>(.*?)<\/script>/i', "", $java);
}
?>
Ответы
Ответ 1
это должно сделать это:
echo preg_replace('/<script\b[^>]*>(.*?)<\/script>/is', "", $var);
/s так, что точка. также соответствует символам новой строки.
Просто предупреждение, вы не должны использовать этот тип регулярного выражения для дезинфекции ввода пользователя для веб-сайта. Слишком много способов обойти это. Для дезинфекции используйте что-то вроде http://htmlpurifier.org/ library
Ответ 2
Это может сделать больше, чем вы хотите, но в зависимости от вашей ситуации вы можете посмотреть strip_tags
.
Ответ 3
В вашем случае вы можете рассматривать строку как список строк с разделителями новой строки и удалять строки, содержащие теги script (сначала и от второго к последнему), и вам даже не нужны регулярные выражения.
Хотя если вы пытаетесь предотвратить XSS, этого может быть недостаточно, чтобы удалить теги script.
Ответ 4
Здесь идея
while (true) {
if ($beginning = strpos($var,"<script")) {
$stringLength = (strpos($var,"</script>") + strlen("</script>")) - $beginning;
substr_replace($var, "", $beginning, $stringLength);
} else {
break
}
}
Ответ 5
Я использую это:
function clear_text($s) {
$do = true;
while ($do) {
$start = stripos($s,'<script');
$stop = stripos($s,'</script>');
if ((is_numeric($start))&&(is_numeric($stop))) {
$s = substr($s,0,$start).substr($s,($stop+strlen('</script>')));
} else {
$do = false;
}
}
return trim($s);
}
Ответ 6
function clean_jscode($script_str) {
$script_str = htmlspecialchars_decode($script_str);
$search_arr = array('<script', '</script>');
$script_str = str_ireplace($search_arr, $search_arr, $script_str);
$split_arr = explode('<script', $script_str);
$remove_jscode_arr = array();
foreach($split_arr as $key = > $val) {
$newarr = explode('</script>', $split_arr[$key]);
$remove_jscode_arr[] = ($key == 0) ? $newarr[0] : $newarr[1];
}
return implode('', $remove_jscode_arr);
}
Ответ 7
Это было очень полезно для меня. попробуйте этот код.
while(($pos = stripos($content,"<script"))!==false){
$end_pos = stripos($content,"</script>");
$start = substr($content, 0, $pos);
$end = substr($content, $end_pos+strlen("</script>"));
$content = $start.$end;
}
$text = strip_tags($content);