За последние 24 часа нас посетили 24457 программистов и 1711 роботов. Сейчас ищет 1781 программист ...

Вырезаем Javascript

Тема в разделе "Прочие вопросы по PHP", создана пользователем Michael, 19 июл 2006.

  1. Michael

    Michael Активный пользователь

    С нами с:
    7 фев 2006
    Сообщения:
    54
    Симпатии:
    0
    Задача - убрать из текста куски javascript-кода, в том числе и такие:
    Код (Text):
    1. <script language="javascript">
    2. function FF ()
    3. {
    4. document.write("<script></script>");
    5. }
    6. </script>
    Хочется чего-нибудь элегантного, вроде одного регулярного выражения 8) , но пока не получается. :?:
     
  2. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    PHP:
    1. <?php
    2. function jsEscape($str) {
    3.    $strEscape = preg_replace('#</?script[^>]*>#ie', 'htmlspecialchars("$0")', $str);
    4.    return $strEscape;
    5. }
    6. ?>
    7.  
    8. <pre>
    9. <script language="javascript">
    10. function FF () {
    11.    document.write("<script></script>");
    12. }
    13. </script>
    14. </pre>
    15.  
    16. <?
    17. $str = ob_get_clean();
    18. $str = jsEscape($str);
    19. echo $str;
    20. ?>
     
  3. Michael

    Michael Активный пользователь

    С нами с:
    7 фев 2006
    Сообщения:
    54
    Симпатии:
    0
    Нужно именно вырезать весь код, а не сделать его неработоспособным.
     
  4. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    preg_replace('#<script[^>]*>.*</script>#si', '', $str)
     
  5. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Ti, проверь эту регулярку на своем предыдущем примере.
     
  6. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    vasa_c
    проверил, окей

    есть другой косяк: <scr<script></script>ipt>
     
  7. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    юзать рекурсию ;)
     
  8. karrbon

    karrbon Активный пользователь

    С нами с:
    14 июл 2006
    Сообщения:
    11
    Симпатии:
    0
    во что должен превратиться данный кусок, и почему.
     
  9. Michael

    Michael Активный пользователь

    С нами с:
    7 фев 2006
    Сообщения:
    54
    Симпатии:
    0
    karrbon, должен быть вырезан полностью.
     
  10. simpson

    simpson Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    PHP:
    1. <?php
    2. $string = '<html>
    3. <head>
    4. <script language="javascript">
    5. document.write("<script></script>");
    6. </script>
    7. </head>
    8. <body>
    9. TEXT
    10. <script type="text/javascript">alert("123");</script>
    11. <br />TEXT
    12. <script>alert("234");</script>
    13. <br />TEXT
    14. <scr<script></script>ipt type=""></script>
    15. </body>
    16. </html>';
    17.  
    18. function remove_js($string)
    19. {
    20.     $js_reg = '~[^"\'](<script[^>]*>.*?</script>)[^"\']~is';
    21.     while (preg_match($js_reg, $string, $out)) $string = str_replace($out[1], '', $string);
    22.     return $string;
    23. }
    24. print remove_js($string);
    25. ?>
     
  11. karrbon

    karrbon Активный пользователь

    С нами с:
    14 июл 2006
    Сообщения:
    11
    Симпатии:
    0
    этого нельзя сделать, если только вы не напишете синтаксический анализатор для яваскрипта.