Danneo и HTML-сущности

Трындец. Решил я значит у себя на сайте добавить раздел о вебдизайне, т.к. про фотошоп мне надоело искать статьи, а про иллюстратор никто не читает. Нашел по быстрому простенькие статьи по вебдизайну, отправил на перевод и начал пробовать опубликовать тестовую статью. Главная задача таких уроков — это показать доступно html-код, css-код  и т.п.

И представьте мое удивление, когда я узнал, что не могу в статье читателю показать код ХТМЛ. Дело в том, что любые HTML-сущности, перед выводом на странице приобразуются к символьному виду.

К примеру, я хочу вывести зрителю такой код:

[/crayon]
Для этого я заменяю все «<» и «>» на «&lt;» и «&qt;«. Иначе читатель увидит просто строку: «Привет, Даннеовцы!», т.к. браузер интерпретирует строку как хтмл-код. А движек danneo (будь он неладен), преобразует это дело обратно к символам. Иными словами, на даннео вы без вмешательства программиста не сможете публиковать уроки с примерами хтмл-кода. Так благодаря этому справочная статья про спецсимволы стала бесполезна для веба.

Ну как нормальный пацан, пошел на сайт разрабов в поисках помощи. Но это оказалось бесполезно, т.к. разрабам пох. Вопрос такой уже поднимался и не раз, но на него молчание годичной давности. Понял, что придется что-то самому думать.

Решение получилось достаточно простое. Для подсветки синтаксиса я использую и здесь и на сайте один и тот-же скрипт (highlight.js). А для его работы, чтобы вывести код с подсветкой синтаксиса его необходимо заключить в теги: <pre> и <code>. Например, чтобы вывести предыдущий блок с кодом я использую такую строку:

[/crayon]
Отсюда видно, что любой блок примера кода заключен внутри тега <code>. Соответственно я решил все что заключено внутри этого тега приводить к html-сущностям. Для этого добавил к даннеовскому api (base\danneo.initapi.php) такую функцию:

[/crayon]
Эта функция может и не сильно грамотно написана, но она работает и ищет в тексте все блоки с кодом и заменяет внутри них спецсимволы на хтмл-сущности. А дальше в выводе статьи (mod\article\index.php) вместо строк:

[/crayon]
Ставлю строки:

[/crayon]
В результате теперь я могу нормально выводить примеры кода HTML. Потом еще немного подумав решил использовать эту функцию только в разделе по вебдизайну.

Вот и спрашивается, о чем думали даннеовцы, когда придумали все хтмл-сущности приводить к символам? А то, каждый раз, когда я говорю, что даннео — цмс нефига не супер, мне на серче дают минуса в репу. А ведь я не слыхал, чтобы была такая проблемма хоть еще в одной CMS. В даннео есть всего один плюс. Но он правда не слабый. Это её легкость и при посещалке в 4к и просмотрах 16-20к в сутки, сайт не требует себе выделенного сервера.

3 комментария

  1. Так функция html_entity_decode заменяет все сущности на соответствующие символы.
    Кстати, у решения, что здесь написано нашелся недостаток. Русские буквы косячат с кодировкой. Но я не разбирался в чем дело.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *