Конференция "Сети" » Пишу парсер html, проблема с <script>
 
  • Pa5ha © (19.08.08 01:34) [0]
    Приветствую.
    Пишу парсер хтмл.
    Получается примерно так: http://sampo.ru/~pashav/files/up1/1.PNG (34 кб.) Если не считать лишней кавычки в строке параметров (лень убирать щас) и недоделанной парсилки текстовых вставок между тегами, то все тип топ.

    Возникла проблема следующего плана. В теге <script> находится код, чаще всего ява-скрипт, но моя прога пока что об этом не знает. Если внутри этого тега будет ещё один тег, то создастся новая нода внутри него. Если встретится "</" то произойдет выход из ноды <script> (потому то есть незакрывающиеся теги, типа <img> или часто просто люди забывают закрыть тот же <p>). Т.е. код типа  document.write("</script");будет обработан моим парсером неправильно, хотя он имеет право на жизнь. Как эту ситуацию обрабатывают браузеры?
  • Pa6ha (19.08.08 01:40) [1]
    if(11<js)d.write('<'+'!-- ')//-->


    вот, например, строчка кода из этого файла. Моя прога подумала что знак "меньше" внутри опеатора if - новый тег и создала его: http://sampo.ru/~pashav/files/up1/2.PNG (36 кб.).
    Парсер яваскрипта писать так лень т.к. я ещё пока не знаю яваскрипт. Как эта проблема решает в спецификации html?
  • Pa5ha © (19.08.08 03:05) [2]
    Код попозжа приведу в форму, и если кому-либо будет интересно - выложу.

    Ситуация со скриптами сейчас мне не понятна. Просмотрел пару каких-то уроков. Там описаны всякие ухищрения по типу как замаскировать скрипты для старого браузера, чтоб он мог попытаться отобразить страницу. Не то. Спецификация хтмл 4.01 весит 700 кб. Мне столько на английском не осилить :)
    "Показать код страницы" в фаерфоксе в некоторых местах, как мне кажется, код неверно подсвечен или я чего-то не понимаю.
    Или подразумевается, что современный браузер знает все языки скриптов, которые могут быть использованы в теге скрипт? И многие сриптописатели не утруждают себя следовать некоторым правилам стандарта (ведь браузер должен быть максимально лоялен к ошибкам страниц)?
  • han_malign © (19.08.08 14:11) [3]

    > Как эта проблема решает в спецификации html?

    //-->
    а в начале еще есть <--//, и в коментариях может быть все что угодно...


    > часто просто люди забывают закрыть тот же <p>

    - а по спецификации - <p>, <li>, <tr>, <td>, <th> и многие другие - закрывать совершенно не обязательно(http://www.w3.org/TR/html401/index/elements.html - Optional End Tag), т.к. у них ограниченная область видимости(они неявно закрываются тэгом верхнего уровня), и при рендеринге это должно учитываться...
  • han_malign © (19.08.08 14:20) [4]
    соврал - в начале //<--, где // - коментарий для скрипта, а <-- - начало коментария HTML...
  • Pa5ha © (19.08.08 19:53) [5]
    А если в скрипте будет
    document.write("-->");

    ? Как мне кажется, проблема остается.
  • Aslan (31.08.08 16:56) [6]
    мне кажется надо определять начало/конец строки, где " или ', хотя проблема остается, у меня в текстовом поле (между <tag> и </tag>) встречается одиночная ' (апостроф), моя программа ее считает за начало строки-как их различить не знаю
  • brother © (05.09.08 12:06) [7]
    может велосипед изобретать не надо?
    по запросу http://yandex.ru/yandsearch?clid=14585&text=html+%D0%BF%D0%B0%D1%80%D1%81%D0%B5%D1%80+delphi
    приглянулость: http://megalib.com/item_show.htm?gl_item_id=901&gl_subject_id=21&action=item_show
    ну итд итп)
  • Pa5ha © (07.09.08 15:09) [8]
    Видел я этот парсер, написан через зат, хотя и работает.

    Мне мой, использующий конечный автомат нравится намного больше.
    Наверно, буду навешивать заплатки для парсинга яваскрипта и кавычек.
    Интересно, только, как проблему криворуких скриптов обходят браузер?
    Нужно было заставить браузеры ругаться на все ошибки, тогда сайтов с быдло-хтмл-ем было бы меньше :)
  • brother © (09.09.08 07:05) [9]
    > Интересно, только, как проблему криворуких скриптов обходят
    > браузер?

    они их не обходят!

    > Нужно было заставить браузеры ругаться на все ошибки

    а они и ругаются ;) только иногда не заметно)
  • brother © (09.09.08 07:12) [10]
    > А если в скрипте будет document.write("-->");? Как мне кажется,
    > проблема остается.

    ну для этого случая какраз все понятно...
    1. увидили: -->
    2. посмторели назад: document.write("
    3. проигнорировали))))))
  • clickmaker © (09.09.08 15:10) [11]
    > Интересно, только, как проблему криворуких скриптов обходят
    > браузер?

    чаще веб-мастерам приходится обходить проблему браузеров, написанных криворукими разработчиками )
  • Wadimka (16.02.10 01:53) [12]
    Да просто поубирал бы перед парсингом все что
    <script***</script>
    и всего делов
  • Мухомор (20.04.11 00:25) [13]
    А если так: document.write("</script>");?  - ведь пишут же!
  • brother © (20.04.11 05:39) [14]
    Ты на дату ветки смотрел?)
  • Очень злой (06.05.11 17:12) [15]
    интерестно, каким образом можно подымать ветки 2008 года? Они же вроде как в архиве должны уже быть...
  • sniknik © (07.05.11 11:14) [16]
    > Они же вроде как в архиве должны уже быть...
    это если успеют, их туда же с "конца" складывают... а эту "подымали" в (16.02.10 01:53) [12] и сейчас вот, она опять в начале...
 
Конференция "Сети" » Пишу парсер html, проблема с <script>
Есть новые Нет новых   [134437   +27][b:0][p:0.001]