1. PHP / Говнокод #5496

    +154

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    // create a new XML document
    /*$doc = new DomDocument('1.0');
    $root = $doc->createElement('root');
    $root = $doc->appendChild($root);
    */
    //Ну вас всех нахрен!
    echo('<?xml version="1.0" encoding="utf-8"?>');
    echo("<root>");
    echo("<tropical>$tropical</tropical>\n");
    echo("<castle>$castle</castle>\n");
    echo("<city>$city</city>\n");
    echo("<forest>$forest</forest>\n");
    echo("<architect>$architect</architect>\n");
    echo("<rain>$rain</rain>\n");
    echo("<ice>$ice</ice>\n");
    echo("<lava>$lava</lava>\n");
    echo("<space>$space</space>\n");
    echo("<virtual>$virtual</virtual>\n");
    echo("<money>$money</money>\n");
    echo("</root>");

    Я ОЧЕНЬ плохой PHP-кодер. Я не знаю, как делать в PHP XML (в .NET другой механизм, а этот я не очень понял), поэтому делаю "в лоб" - при помощи echo.

    Запостил: RaZeR, 02 Февраля 2011

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

    • показать все, что скрытоНе вижу ничего плохого в генерации XML при помощи echo. Разве что при выводе переменных надо бы экранировать спецсимволы (вдруг попадутся?).
      Ответить
      • Есть проблема - документ в браузер почему-то выводится со всеми цифрами подряд - а обычно должен выводится с сообщением "С этим документом не связана ни одна таблица стилей". С чем может быть связано?
        Ответить
        • прочитал 5 раз - ничего не понял
          Ответить
          • Ну, скажем, хочу я эту ХМL-ку посмотреть в браузере не открывая "Просмотр HTML-кода", как, например, [url="http://api.hostip.info/?ip=12.215.42.19"]эту[/url]. Она показывается напрямую. А моя - почему-то как простой HTML-документ, все значения нодов пишет в строчку О_о
            Ответить
            • Это называется "А не использовать ли нам bbcode?" =_=
              Ответить
            • echo('&lt;?xml version="1.0" encoding="utf-8"?&gt;);
              echo("&lt;root&gt;");
              echo("&lt;tropical&gt;$tropica&lt;/tropical&gt;\n");
              итд
              Ответить
        • Перед всеми echo (точнее, до любого вывода в браузер):
          header('Content-Type: text/xml; charset=utf-8');
          Ответить
          • а вдрух это только чать большой хтмл стрницы, а не отдельное хмл?
            Ответить
            • да ну. и с хмл заголовком?
              Ответить
            • Нет, это именно отдельный xml, который парсит (будет парсить - пока другой механизм в разработке %)) игра.

              P.S: А за что код минусуют-то?!
              Ответить
              • а ясно, очередной "проЭкт"
                Ответить
                • http://rawbyte.user-board.net/
                  Собственно, страница проекта - http://gizzles.99k.org/
                  Ответить
                  • ужос)
                    Ответить
                    • А почему ужос-то?)
                      Ответить
                      • дизайн в стиле "вырвиглаз" :)
                        Ответить
                        • Моя программист, моя не оч дизайнер)
                          Да и дизайн временный. У сайта основная нагрузка - сохранение всех очков и времени игроков.
                          Ответить
                          • Такие отмазы некрасивы. Я-де не программист, потому пишу через жопу. И не дизайнер, потому UI - вырвиглазный песец. И не архитектор, поэтому..
                            Ответить
                            • ну а что делать? вон, например, я се хомяк сделал, от начала и до конца - так тоже, видите ли, диз х... плохой )
                              Ответить
          • О! Шикарно, благодарю :)
            Ответить
      • +1, для генерации этой маленькой хмлки дом будет явно лишний)
        Ответить
        • Правильно - дом лишний, его нужно отдать нуждающимся в жилье.
          Ответить
    • почему бы не использовать simplexml? он читает и пишет хмлы в\из обыкновенных массивов
      Ответить
      • это же нужно открыть гугл :)
        Ответить
        • ну, если и это уже лень.... :)
          Ответить
          • Кроме шуток - может быть, у парня просто аврал (себя-то любимых вспоминаем в таких ситуациях, да). Хотя он этого не говорил.
            Ответить
    • ну хорошо что автор понял, что это решение, так сказать, попахивает
      Ответить
      • я не понял, почему простую маленькую хмлку нельзя генерировать через эхо?
        Ответить
        • можно.
          но
          1. ее возможно придется читать
          2. структура может измениться и даже сильно усложниться

          во всех случаях код придется переписывать, причем без помарок

          да, и еще
          3. значения не экранированы, будет фейл, если в данных придут спецсимволы навроде & < > "
          Ответить
          • а еще есть <![CDATA]====3
            Ответить
            • только если нет ]]>
              Ответить
              • ]]> подразумевается, но с ним конструкция смотрится не так стройно
                Ответить
                • так что для маленьких хмл нормальный вариант SimpleXML. разве что у него гемор с неймспейсами
                  Ответить
                  • согласен, к тому же у DOMXML есть свои геморы, например, с копированием ноды из одного DOMDocument в другой.
                    Ответить
          • 1. когда придётся будем думать)
            2. усложнится сдлеаем как положено
            3. не вижу проблемы заэкранировать
            Ответить
        • потому, что попробуйте без матерщины открыть XML сгенерированный следующим скриптом:
          echo('<?xml version="1.0" encoding="utf-8"?>');
          echo("<root>");
          echo('<a href="http://example.com/?god=1&world_domination=true" />');
          echo("</root>");
          Ответить
          • ткните носом в проблему :)
            Ответить
            • &amp;
              Ответить
            • фиксится)
              Ответить
              • $link = "http://example.com/?god=1&world_domination=true";
                $title = "В отакэ >>";
                echo('<a href="'.$link.'">'.$title.'</a>');

                корректную реализацию фикса в студию, желательно сразу оценить её пахучесть и удобство
                Ответить
                • String link = "http://example.com/?god=1&world_domination=true";
                  String title = "В отакэ >>";
                  System.out.println("<a href='"+link+"'><![CDATA["+title+"]]</a>");
                  Ответить
                  • 1. &amp; таким способом не фиксится
                    2. может еще на брейнфаке?
                    Ответить
                  • title = "В отакэ ]]>><![CDATA["
                    Ответить
                    • из пальца
                      Ответить
                      • И прямо, извинете, в жопу.

                        Может лучше прикрыться от эксплойта трусами? А то больно будет.
                        Ответить
                        • В данном конкретном случае, где вы прогнозируете появление подобного эксплойта?
                          Ответить
                          • Попытка чтения такого файла в лучшем случае обломится, в худшем -- приведёт к чтению неверных данных.
                            Ответить
                • http://php.net/manual/en/function.htmlspecialchars.php
                  Чем не нравится?
                  Ответить
                  • Названием, если бы было xml_entities, еще куда ни шло. Вероятно у вас небольшой опыт генерации XML.

                    P.S. Подсказка от КО (спойлер, выделить текст для чтения):
                    ни htmlspecialchars, ни htmlentities не подходят для генерации валидного XML, первая преобразовывает недостаточный набор ентитей, а последняя больше чем есть в спецификации.
                    Ответить
        • SimpleXML или статикой отдавать.
          Ответить
        • Людей, которые в 21-м веке строят XML из строчек надо сжигать на корстах (по-старинке...). Почему DOM нужен? DOM сделает валидацию, и обратную и вперед-совместимость, если что, и кодировку подправит, если нужно. Кроме того, кода меньше самому писать, кроме того DOM реализован на сях, а не на тормознутом интерпретируемом языке, в котором даже минимальной оптимизации скомпилированого кода не делается.
          Ответить
          • у вас волчанка :)
            дёргать жирную либу ради трёх строк - маразм
            Ответить
            • Нет, маразм как раз то, что вы прелагаете... вот это кстати одна из причин почему PHP - это в 9 случаях из 10 - "ковбойский" код. Т.е. код написаный хаотично и для того, чтобы решить сиюминутную проблему (вместо того, чтобы подумать о совместимости и поддержке, например). При этом, когда "ковбой"-кодер переписывает "по-простому" уже давно написаные вещи, всегда получается хуже.
              Ответить
              • Я не знаю пхп, я жавист. И я точно не буду добавлять в проект кучу толстых либ для генерации одной несчастной хмлки.
                Ответить
          • >DOM сделает валидацию, и обратную и вперед-совместимость, если что, и кодировку подправит, если нужно.
            Если все делать по-нормальному, и с "echo-методом" таких проблем не будет никогда.
            >Кроме того, кода меньше самому писать
            Я бы так не сказал. DOM уж больно громоздок, когда дело доходит до создания документа.
            >кроме того DOM реализован на сях, а не на тормознутом интерпретируемом языке
            То есть строить дерево целиком быстрее, чем выплевывать в буфер строчки?
            Ответить
            • Как ни странно, но да, потому что использованы не просто строки, а строки, в которых делается замена. В XML алгоритм вывода может оказаться в целом быстрее и проще, чем если интерпретатор будет искать и заменять строки. Кроме того, расход оперативной памяти будет меньше. Но, самое главное, что в таком примере производительность и объем памяти нужный на то, чтобы сделать те же действия тем или другим способом пренебрежительно малы. Что важно, так это то, чтобы работа была сделана быстро и ее не нужно было целиком переделывать уже послезавтра.
              Конкретно для этого варианта можно было сделать метод сериализующий массив в XML. Кода было бы меньше.
              Не важно на каком языке, это бы выглядело как-то так:
              XML buildTree(Array of Strings array)
              {
                  xml = new XML
                  for each string in array
                      node = xml->createElement(string)
                      xml->addNode(node)
                  return xml
              }
              print buildTree(new Array of Strings(a, b, c, d))->toString()
              Ответить
    • И еще вопрос к комментаторам:
      Как думаете, xhtml-тэг <br /> может присутствовать в, скажем, RSS ленте? В гугле некоторые так делают, а четкого стандарта что-то не могу найти.
      Ответить

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