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); } ?> 

это должно сделать это:

 echo preg_replace('/<script\b[^>]*>(.*?)<\/script>/is', "", $var); 

/ s, так что точка. также соответствует новой строке.

Просто предупреждение, вы не должны использовать этот тип регулярного выражения для дезинфекции ввода пользователя для веб-сайта. Слишком много способов обойти это. Для дезинфекции используйте что-то вроде библиотеки http://htmlpurifier.org/

Это может сделать больше, чем вы хотите, но в зависимости от вашей ситуации вы можете посмотреть на strip_tags .

В вашем случае вы можете рассматривать строку как список строк с разделителями новой строки и удалять строки, содержащие теги сценария (сначала и от второго до последнего), и вам даже не нужны регулярные выражения.

Хотя если то, что вы пытаетесь сделать, это предотвратить XSS, этого может быть недостаточно, чтобы удалить только теги сценариев.

Вот идея

 while (true) { if ($beginning = strpos($var,"<script")) { $stringLength = (strpos($var,"</script>") + strlen("</script>")) - $beginning; substr_replace($var, "", $beginning, $stringLength); } else { break } } 

Я использую это:

 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); } 
 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); } 

это было очень полезно для меня. попробуйте этот код.

 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);