1. Куча / Говнокод #21773

    −17

    1. 1
    <item >1</item>

    Чо, так можно?

    Запостил: 3_14dar, 03 Декабря 2016

    Комментарии (60) RSS

    • Раз не доперли сами, уточню - пробел после имени тега.
      Ответить
      • А я подумал, что это код на языке J, и решил не влезать.
        Ответить
        • >>"А я подумал, что это код на языке J, и решил не влезать."<<
          Где здесь J, inkanus-gray?
          Ответить
      • конечно можно, какая разница?
        Ответить
      • > Чо, так можно?
        > пробел после имени тега
        Ну и зачем ты парсишь HTML регулярками?
        <item >1</item >
        Ответить
        • Если Подстрока(таг, 5) = ">"...
          Ответить
          • Вот из принципа буду добавлять везде пробелы, чтобы 3_14dar'ские парсеры об мой сайт зубы обломали.
            Ответить
            • В питоне даже DOM не нужен: есть бьютифул суп который HTML парсит как конфетка.

              А потом Сёма узнает что есть незакрытые таги и юникод и комментарии
              Ответить
            • У lxml/xml есть зубы? :)

              > об мой сайт
              У тебя сайт есть?
              Ответить
              • Он не только есть, через него еще и кооперировались в конфочку, пока говнокод две недели лежал.
                Ответить
                • > кооперировались в конфочку
                  3.5 анона
                  Ответить
                  • Потому что ты свой сайт не пиаришь. Закажи рекламу в директе, проспамь ссылками на сосаче.
                    Ответить
                    • А чё там пиарить, если это просто недозеркало ГК?
                      Ответить
                      • Ну там зеленым написано, присмотрись.
                        А вообще, можно было бы и поспамить говнокод ссылкой. Глядишь, в конфе было бы больше 3.5 анонов неймфагов.
                        Ответить
                        • ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ, БЛЯ!
                          Ответить
            • > </item >
              Хм, и так можно? Но по какой логике? Про открывающийся тэг проде Инканус разъяснил.

              > из принципа буду добавлять везде пробелы
              Мощный ультиматум. Уже вижу, как 3_14dar надевает кастет, шубу и едет в Сибирь.
              Ответить
              • Проще отсюда заказать. За пару пособий борманда в лесу прикопают, а когда рублик еще упадет - так тем более.

                >об мой сайт
                Деревенский сортир обаме и меркель вход запрещен.jpg
                Ответить
              • Возможность вставки пробела в закрывающий тег и меня удивила... но так можно по стандарту, хотя у закрывающего тега не может быть атрибутов.

                Вероятно, разрешение на вставку пробелов появилось в процессе унификации. В XML для элемента без содержимого вместо такого кода:
                <item class="malo_pol" ></item>
                Разрешили писать такой код:
                <item class="malo_pol" />
                А раз у открывающего тега и у «самозакрытого» тега пробелы разрешены, то почему бы их не разрешить у закрывающего.
                Ответить
                • тащемта зависит от стандарта. в HTML обычно присутствуют теги типа <hr><br>, а вот в XHTML они обязательно должны быть закрыты <hr/> <br/>, и аттрибуты с маленькими буквами написаны, так же как и элементы.
                  Ответить
                  • И это очень хуёво, да.
                    Потому что раньше парсить HTML было проще, и статически проверять -- тоже.
                    А теперь можно случайно не закрыть таг, и узнать об этом через три месяца, когда всё поедет.

                    С другой стороны это же веб: в нем принято использовать максимально хуёвый инструмент из всех возможных.
                    Ответить
                    • > узнать об этом через три месяца, когда всё поедет.

                      Пропусти страничку через валидатор и будет счастье. "Случайно" оно не поедет, версия HTML указывается в DOCTYPE.
                      Ответить
                      • >>Пропусти страничку через валидатор и будет счастье
                        Правильно. Зачем иметь возможность проверять документ на валидность локально? Зачем там fast fail? Пусть это делает внешний сервис.

                        >>"Случайно" оно не поедет,
                        Случайно у тебя добавится текст на веб сайте, или будет другой резолюшен, и так как ты вообще не представляешь как и почему твой сайт работает (а если ты перепутал таги то ты не представляешь) то тебя ждет сюрприз.
                        Ответить
                        • > Пусть это делает внешний сервис.
                          Ты про вещи вроде tidy не слышал чтоли? Напиши себе интеграционный тест, который поднимает локальный сервер, запрашивает странички и валидирует на CI-сервере.
                          Ответить
                          • Ты это серьезно сейчас?

                            Во времена XHTML мне даже самый тупой IDE мог выстроить код в лесенку и подсветить красным пропущенный таг, в теперь мне нужно tidy использовать?

                            Какое у НЕ XML-based языка разметки преимущество кроме того, что дебилам с блокноатами сложно таги закрывать?
                            Ответить
                            • > раньше парсить HTML было проще
                              > Во времена XHTML

                              О каких временах XHTML ты говоришь? HTML изначально допускал незакрытые теги и кучу всяких вольностей. XHTML родился на волне увлечения XML, он никогда толком не был широко распространён. Он был настолько мертворождённым, что даже его создатели давно его забросили и пересели на HTML5.

                              Собственно, поэтому я и неправильно интерпретировал "раньше парсить html было проще".
                              Ответить
                              • >>О каких временах XHTML ты говоришь?
                                Примерно о середине нулевых

                                >>что даже его создатели давно его забросили и пересели на HTML5.
                                Вопрос в том, зачем было разрешать HTML5 а не XHTML5?
                                Запретили бы незакрытые таги, сказали бы что с незакрытым тагом все переключается в legacy loose mode, где всякие ваши говномодные <input type="date" не работают, и через пять лет всё везде бы закрывалось.

                                А теперь я хочу распарсить доку по джанге и конвернуть в нужный мне формат, и не могу сделать это каким-нить XSLем, потмоу что половина тагов там не закрыта.
                                Ответить
                                • Более того, у современных браузеров парсер совместим с HTML5, а конкретно со всяким говном, которое существовало де-факто, но было узаконено в HTML5, вроде автозакрытия тегов.

                                  Я не могу вложить <ul> в <p>, потому что перед <ul> элемент <p> автоматически закроется. И это говно в популярных браузерах работает даже в режиме XHTML, хотя XHTML автозакрытия тегов не подразумевает.
                                  Ответить
                                  • >>даже в режиме XHTML
                                    Если указать правильный content-type (application/xhtml+xml ) и не закрыть таг, что IE покажет ошибку вместо страницы.

                                    К сожалению в мире не более ноля сайтов используют этот приём.
                                    Ответить
                                    • IE7 с настройками по умолчанию не показывал вообще ничего, если в качестве content-type был указан application/xhtml+xml. Приходилось править реестр, добавляя в него описание application/xhtml+xml.

                                      Вероятно, по этой причине многие сервера возвращают text/html вместо application/xhtml+xml даже для XHTML.
                                      Ответить
                                      • Веб это боль, ад, говно, костыли, хуёвые стандарты, и глупые разработчики.
                                        ------
                                        Веб нужно запретить у хуям, и разработать WEB 3.0.
                                        В нем будет специльный виртуальный машин, под который и верстать и писать можно будет на оче хорших языках
                                        Ответить
            • Лучше добавлять не пробелы, а табы и переносы строк, причём смешивать переносы строк в dos-style и в unix-style. Переносы строк на 95% безопаснее чем пробелы, стандартом не запрещены, ставлю где хочу.
              Ответить
        • Это вообще по стандарту?
          Ответить
          • ДА, ВАЙТСПЕЙСЫ НЕ СЧИТАЮТСЯ

            ЭТО ВЕЛЛ ФОРМД ЭКСЭМЭЛЬ
            Ответить
          • https://www.w3.org/TR/html5/syntax.html#start-tags
            Ответить
            • html5 не есть подмножество xml, к сожалению
              Ответить
              • Как-будто это так важно в этом случае:

                https://www.w3.org/TR/xml/#sec-starttags
                Ответить
                • В данном случае нет, но вообще важно.

                  Это _разные_ языки, прост тут они ведут себя одинаково
                  Ответить
              • Небольшое замечание: HTML5 — это первый стандарт HTML, который описан не как язык, а как интерфейс, данные из которого можно сериализовать во что угодно: хоть в HTML, хоть в XML, хоть в собственный формат, который поддерживает хранение иерархических объектов.

                В главе 8 описан синтаксис HTML, в главе 9 — синтаксис XHTML (да, XHTML5 существует и даже поддерживается всеми современными браузерами, хотя общепризнанного DTD нет).

                В главе 1.6 вообще разведён холивар:
                https://www.w3.org/TR/html5/introduction.html#html-vs-xhtml
                Ответить
            • Это xml был
              Ответить
    • Хуясе о_О
      http://stackoverflow.com/questions/3314535/white-space-inside-xml-html-tags

      Осталось узнать: кто это придумал и нахуя; какой либой автор высрал такой xml.
      Ответить
      • Да поди высер какого-нибудь пыхошаблонизатора:
        <item <?=$attributes?>><?=$value?></item>
        Ответить
        • <item 
          <?
          if ($kolichestvo_pokupok < 32) {
          echo "class=\".malo_pol\""
          }
          ?>
          ><?=$value?></item>
          Ответить
      • А почему этот пробел вообще должен беспокоить?

        Ребята, давайте вспомним, что бывает после имени элемента. После имени элемента могут следовать атрибуты, отделённые от имени элемента и друг от друга пробелами, а точнее, цепочками, определяемыми такой регуляркой:
        S	   ::=   	(#x20 | #x9 | #xD | #xA)+

        (в HTML ещё разрешён символ #xC).

        А теперь внимание! Что будет, если атрибутов нет? Подсказка: после последнего атрибута разрешён разделитель подобно тому, как лишний разделитель элементов массива в некоторых языках.
        Ответить
        • сам ты регулярка
          это BNF

          https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_form
          Ответить
          • Чем это не регулярка? Ну разве что "S" и квадрояйцевый биписюн убрать осталось.
            Ответить
            • Ну регулярки обычно описываются в терминах POSIX ERE или PCRE. Ни там ни сям квадраяйца нету.

              С другой стороны регулярное выражение есть описание конечного автомата для разбора регулярной грамматики, а такой автомат и по BNF построить можно (и даже больше -- context free можно)

              Так что квадрояйца это не регулярка, это КРУЧЕ чем регулярка
              Ответить
              • > Так что квадрояйца это не регулярка, это КРУЧЕ чем регулярка
                Прошу заметить, квадрояйца только с рекурсией при некоторых условиях круче, чем регулярка.
                Ответить
                • Да, например когда нужен алгоритм с экспоненциальной сложностью

                  на самом деле это зависит от реализаци
                  Ответить
        • Ах вот откуда оно вылезло.
          Ответить
          • Так что всё просто: пробелы (переносы строк, символы табуляции) разрешены там, где разрешены атрибуты (и там, где должно находиться содержимое, но уже по другой причине).
            Ответить
          • теперь ты знешь, что у элементов XML могут быть атрибуты!
            Ответить

    Добавить комментарий