Joomla: проблема с угловыми скобками Печать
Добавил(а) microsin   

В этой статье предоставлен перевод обсуждения на форуме [1] проблемы порчи статей Joomla при открытии их во встроенном редакторе (или при сохранении), когда все блоки текста, обрамленные в угловые скобки, уничтожаются. Проблема в том, что система Joomla ошибочно воспринимает эти блоки как теги, и пытается их "восстанавливать". В результате в статью невозможно вставлять примеры кода HTML и C++ без специальной обработки текста.  

Например, на моей установке Joomla 1.5 порча статьи (выкусывание текста с угловыми скобками и замена его на закрывающие теги в тексте) происходит при открытии статьи в визуальном редакторе JCE Editor. Пока я решаю проблему только таким способом: после угловой скобки < всегда ставлю пробел, и только тогда текст не уничтожается. Пример:  

< !DOCTYPE HTML>< html>
 < head>
  < title>Тег BODY< /title>
  < meta charset="utf-8">
 < /head>
 < body onload="alert('Документ загружен')">
 
  < p>Это простой текст.< /p>
 
 < /body>< /html>

Очевидно, что такой способ борьбы решает проблему только наполовину, потому что текст примеров кода искажается, и нужно постоянно следить за открывающими угловыми скобками. Раньше я пытался решить проблему, заменяя текст с угловыми скобками обычными картинками, но это тоже очень неудобно. Итак, далее идет перевод постов с форума, где люди также пытаются решить проблему угловых скобок. 

[Как сделать так, чтобы Joomla перестала вычищать HTML-теги из текста статьи?

(090323) simonium210: Привет, народ. Моя инсталляция Joomla постоянно удаляет все теги HTML, которые я ввожу в тексте статьи. Я пробовал использовать и TinyMCE, и FCKeditor в разных модулях, но это не помогает, Joomla все еще раздевает все попавшиеся куски текста с угловыми скобками. 

Я убедился, что настройках фильтрации [3] (меню Статьи -> Настройки) все пользователи в белых списках, так что проблема не в этом. Не знаете, что это может быть? У кого-нибудь была похожая проблема?

(090412) TutorOnline: Приветствую. Просматриваю этот форум, чтобы найти ответ, почему мои теги формы HTML тоже вырезаются. Я пытаюсь ввести форму в HTML, и Joomla развертывает тег action из тега post, так что, например,

< form method="post" action="http://www.имя_домена/index.html">

превращается в

< form method="post">

когда я делаю клик на кнопке Сохранить. Вы нашли ответ на свою проблему? 

(090414) simonium210: Да, я разобрался, и по-моему не забыл оставить решение на форуме, но не знаю точно, в каком именно месте. Я думаю, что Вам нужно обратить внимание на файл /libraries/phpinputfilter/inputfilter.php, где есть две функции, называемые соответственно filterTags и filterAttr (если мне не изменяет память). Вам нужно просмотреть эти функции, и проверить, что они делают. 

Надеюсь, что это поможет. 

(090430) billengle: Я нашел Ваш ответ в предыдущих постах. Не могли бы Вы уточнить, как отредактировали эти функции? Они кажутся отчасти важными, и нельзя их просто взять и выкинуть.  

Вот так можно помешать Joomla раздевать теги при вводе статей со стороны фронтэнда: отредактируйте файл libraries/joomla/filter/filterinput.php, нужно подправить функции "_cleanTags" и "_remove", чтобы решить проблему. 

Кто-нибудь знает, как это сделать? Пытаюсь использовать код в моем самописном компоненте. 

(090505) simonium210: Прошу прощения, что долго не отвечал Вам. Действительно, нужно редактировать файл libraries\joomla\filter\filterinput.php, и поправить только одну функцию _remove($source). Я заменил содержимое этой функции следующим кодом:

function _remove($source)
{
      // предотвращает от атаки php injection
      $source = str_replace("< ?", "", $source);
      
      // предотвращает xss
      $source = str_replace("< script", "", $source);
      $source = str_replace("< /script>", "", $source);
      
      // предотвращает атаку sql injection
      $source = str_replace("'", "'", $source);
      
      return $source;
}

Не знаю, одобрили бы разработчики Joomla этот метод, и возможно здесь могут быть некие проблемы с безопасностью. Однако для меня такая правка решила проблему. Надеюсь, что этот совет поможет. 

(090505) AmyStephen: В Joomla 1.5.8 (я надеюсь), были изменены настройки по умолчанию для фильтрации вводимого в статьи текста. В настоящее время многие люди отмечают, что HTML вырезается из вводимого текста. Это изменение было сделано по соображениям безопасности. 

Вы можете настроить фильтрацию текста, так чтобы она удовлетворяла Вашим потребностям, см. описание в документации вики с сайта docs.joomla.org (прогуглите Why does some HTML get removed from articles in version 1.5.8? site:docs.joomla.org [4]). Смысл настройки в том, что в глобальных настройках обработки статей (меню Статьи, кнопка Настройки), в разделе Filtering options выбираются все группы, которые надо фильтровать (например все, кроме привилегированной группы Super Administrator), и к ним применяется тип фильтрации Blacklist (черный список). В результате у всех пользователей, кроме тех, кто входит в группу Super Administrator, тест статей будет подвергаться обработке, т. е. запрещенные теги будут вырезаться. 

Если Вы используете редактор контента Tiny MCE, то Вам нужно также настроить его плагин: 

• Code Cleanup on Startup -> Off
• Code Cleanup on Save -> Always (TinyMCE начиная с версии Joomla 1.5.12)
• Do Not Clean HTML Entities -> Yes (в Joomla версии 1.5.15 и более новых этот пункт называется Entity Encoding -> Raw) 

Не могу заставить себя принять мысль, что требуется ломать ядро Joomla 1.5 для решения проблемы. Было бы лучше тщательнее поискать решение, например воспользоваться системой поиска Google Advanced Search, и ввести в качестве домена site:joomla.org. Наверняка Вы найдете информацию получше. Настройка фильтра также описана в описании релиза, советую Вам ознакомиться с деталями, когда Вы обновите систему. 

Хочу надеяться, что Вы сохранили копию файла, который Вы хакнули. Рекомендую Вам вернуть его обратно в старое состояние. Если Вы не сохранили копию, то можете загрузить новую копию дистрибутива Joomla, распаковать его и восстановить исходное содержание файла filterinput.php, взяв копию из дистрибутива. 

(090505) billengle: Привет Amy, благодарю за ответ. Фактически я пробовал то, что Вы советуете, но не думаю, что это мне помогло (по крайней мере, положительно повлияло на мой самописный компонент). Эти настройки также будут работать с пользовательскими компонентами или просто повлияет на статьи? Попробую проверить настройки снова. Соглашусь с Вами, что взлом ядра Joomla в попытках решить проблему - не самый хороший метод. 

(090505) billengle: Я выполнил изменения в менеджере статей, и это фактически сохраняло форматирование HTML для статьи. Но это не дало эффекта в моем пользовательском компоненте, который использует JCE (визуальный редактор статей Joomla Content Editor). Форматирование HTML все равно теряется. 

(090505) AmyStephen: Посмотрите, как com_content модели статьи реализует фильтрацию и делает то же самое для Вашего самописного компонента. Также удалите JCE из вычислений во время тестирования, чтобы гарантировать, что причина проблемы не в фильтрации JCE. 

(090506) billengle: Я хорошо просмотрел код, и не увидел место, где происходит вырезание тегов HTML. 

(090506) AmyStephen: Проверьте код в administrator / components / com_content / models / article.php - начиная с // Filter settings. Это должно помочь Вам в работе с JFilterInput. Просмотрите это, и если у Вас есть вопросы, то спрашивайте. 

(090508) billengle: Привет Amy, снова благодарю за Ваш ответ. Я работаю на Joomla 1.5.10, и не нашел файл в указанном месте. Я просмотрел element.php, но в нем нет секции настроек фильтра (filter settings). Попытаюсь изучить JFilterInput и понять, смогу ли его использовать. Это все для меня незнакомо.

С помощью поиска по форуму наконец нашел, мне нужно. Я понял, что когда я привязывал post (см. код ниже), то фактически вытягивал оригинальные данные место того, чтобы позволить использовать HTML. Я бы рекомендовал использовать это вместо опубликованного ранее хака, поскольку это простое, и "безопасное" решение.

Хороший код:

< ?$post = JRequest::get( 'post' );
$post['text'] = JRequest::getVar( 'text', '', 'post', 'string', JREQUEST_ALLOWHTML );
if (!$sgrow->bind( $post )) {>

Плохой код:

< ?$post = JRequest::get( 'post' );
$post['text'] = JRequest::getVar( 'text', '', 'post', 'string', JREQUEST_ALLOWHTML );
if (!$sgrow->bind( JRequest::get( 'post' ) )) {>

(090509) Vayner: Таким образом, где решение для людей, которые просто обновили свою систему, и ожидают возможности вставки кода HTML в редакторе содержимого статьи? 

Независимо от того, как я пишу код в статье, мне все еще приходится использовать после символов тега разделители. 

(090509) billengle: Неверно. Я использую редактор статей JCE Editor вместе с Joomla 1.5.10. При получении данных у меня не было проблемы, данные не фильтровались. В моем случае фильтрация происходила только при сохранении. 

(090510) Vayner: Как может быть, что фильтрация все еще происходит даже после того, как я раскрыл все теги из filterinput.php? Есть ли главный выключатель (фильтрации) или что-то подобное? 

(090510) billengle: Не используйте хак. Все что я сделал - изменил параметры blacklist для всех (см. посты Amy) и после этого в моем самописном компоненте я добавил "хороший" код (приведенный ранее). Хак не потребовался. 

(090510) AmyStephen: Думаю, что в этом обсуждении есть два варианта проблемы, каждый из них связан с тегами HTML, но принятие решения зависит от того, какая именно проблема стоит перед Вами. 

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

Если Вы используете Joomla 1.5 и хотите, чтобы Ваши статьи содержали HTML, но находите при этом, что теги HTML вырезаются, когда сохраняете статью, то попробуйте уже описанный ранее совет с редактированием настроек (подробнее про настройки фильтрации см. [3]). 

Если Вы создаете свой собственный компонент (Custom Component), и хотите использовать JFilterInput, когда сохраняете контент, то см. код в components / com_content / models / article.php, начиная с // Filter settings. 

@wager - прошу прощения, что ранее я некорректно дала путь до файла (administrator/ в начале пути). 

Если Вы взламываете ядро, то скорее всего Вам не поможет обычное решение, заключающееся в изменении настроек фильтрации. 

(090510) Vayner: Привет Amy. Ваши советы вызвали у меня дополнительные вопросы: 

- Упомянутые в Вашем примере настройки опций фильтрации должны влиять только на всех пользователей, кроме Super Administrator, это понятно. Тогда почему для меня, когда я Super Administrator, все равно применяется фильтрация, и мои теги в HTML статьи вырезаются?
- Почему, когда я вставляю Form в редакторе HTML, то все что у меня остается, это только < div> < /div>? 

(090510) AmyStephen: Если не ошибаюсь, в версии Joomla 1.5.10 такая проблема исправлена. Не должно быть абсолютно никакой фильтрации HTML для Super Administrator, если у Вас установлен последний релиз (и конечно если Вы правильно сделали настройки фильтрации). 

Если у Вас не последний релиз (на момент написания этого поста версия Joomla 1.5.10), то с обновлением проблема должна быть решена. 

(090511) Vayner: Я работаю в версии 1.5.10, обновившись с версии 1.5.8 сразу после того, как появилось обновление. 

(090511) AmyStephen: Вы пробовали правильно настроить опции фильтрации, как я уже рекомендовала? Попробуйте отключить фильтрацию, как задано в примере 2 статьи [3]. При этом для пользователей привилегированных групп (Administrator, Super Administrator) фильтрация должна быть выключена. 

(090511) Vayner: Да, я пробовал настраивать опции фильтрации, но безуспешно. Любой HTML-код, который я вставляю, вырезается, остаются только теги < div> < /div>. 

(090511) dhuelsmann: Если Вы используете tiny MCE Editor, то Вы можете также захотеть откорректировать настройки плагина: 

Code Cleanup on Startup Off On
Code cleanup on save Never Front Only. Always
Do not clean HTML entities. Yes No

С наилучшими пожеланиями, Dave. 

(090511) AmyStephen: Dave, я уже выложила этот совет на страничке [4]. 

(090511) dhuelsmann: Этот совет у меня работает. 

(090511) Empowermom: Вы можете также проверить JOOMLA ARTICLE PARAMETERS -> FILTERS (параметры статей -> фильтры). У Вас ДОЛЖНО быть как минимум 2 человека в белом списке. 

Поскольку в настоящее время работаю офлайн над новым сайтом, и я единственный пользователь, то я создал второй вход в систему для себя, так что теперь имеется два суперадмина. Затем я поместил всех в черный список, кроме Admins и SuperAdmins (как и рекомендуется в Примере 2 статьи [3]). Кроме того, когда сделаете это, то не подключайте любые фильтры или теги.

(090512) Vayner: Отлично! У меня раньше было установлено Code cleanup on save в значение Always. Я поменял на Never. После этого я смог вставить в статью код кнопки. 

Хотя все же описание функционала неточное. Это исправляет очистку кода, когда я обновил редактор HTML. Я не понимал, что учитывается при сохранении. Все равно, благодарю Dhuelsmann и Amy! 

(090512) matthewham: Я столкнулся с такой же проблемой вырезания тегов HTML в Joomla 1.5.10, но мои попытки исправить это изменением фильтрации текста в настройках менеджера статей (метод, который был рекомендован здесь, описан в статье [3] и на других форумах) не дали результата. Меня ввело в ступор, что панель редактирования глобальных настроек Global Configurations, которая открывается при клике на кнопке Настройки в Менеджере Статей, расширяется только до следующей радиокнопки опций: 

For each feed item show: Intro Text / Full Text (Для каждой статьи показать: Вводный текст / Весь текст)

Т. е. диалог опций не содержит ожидаемых настроек Filtering Options, где я мог бы поменять настройки групп и blacklist / whitelist. У кого-нибудь есть идеи, почему так? Я в полном недоумении. 

Заранее благодарю, Matt. 

(090521) leolll: @Matt - не могли бы Вы дать скриншот? Также иногда расширения FireFox могут привести к случайным изменениям кода страницы (особенно если Вы используете alpha/beta версии). Вы пробовали просмотреть панель параметров, когда запустили Firefox в безопасном режиме (Safe Mode)? 

(090526) Johigh: Не знаю, связана ли моя проблема с фильтрацией, но она ближе всего подходит к тому, что обсуждается здесь, так что тоже присоединяюсь. 

Я создал множество статей в бакэнде Joomla; когда я редактирую HTML статей в бакэнде, то со специальными символами все ОК. Но когда я пытаюсь выполнить то же самое редактирование во фронтэнде, то на выходе я получаю код HTML, из которого вырезаны специальные символы. Причем не когда я сохраняю статью, а когда я открываю редактирование статьи в редакторе (даже не используя специальные редакторы WYSIWYG). Т. е. комбинация символов & amp ; превращается в &, а комбинация & pound ; превращается в знак фунта. В результате, если весь этот испорченный текст сохранить, то я теряю весь текст, где использовались специальные символы HTML. 

Обратите внимание: я МОГУ сохранить специальные символы HTML и через фронтэнд, и они сохраняются нормально. Но когда я решил снова отредактировать эту статью в редакторе фронтэнда - то все специальные символы превращаются в свое бинарное представление, и соответственно пропадают из видимого текста. Если я отменю редактирование (не буду сохранять статью) во фронтэнде, то изменения статьи не происходит, и все специальные символы в тексте остаются нетронутыми. Если же я сохраню статью, то она сохраняется уже без специальных символов, потому что они были удалены в тот момент, когда я открыл статью в редакторе. 

Прим. переводчика: у меня абсолютно такая же проблема, которая описана здесь. 

Ни одна из опций фильтрации не влияет на это поведение. Это происходит еще с кем-нибудь? 

(090528) shoulders: Может ли мне кто-нибудь объяснить, как выключить эту функцию вырезания насовсем и навсегда? Я не возражаю и против взлома ядра. 

Все, что я хочу сделать - просто вставить в статью фрагменты кода, и использовать geshibot, чтобы красиво их отобразить. 

Использую FCKeditor, и настроил его не обрабатывать HTML, и настройки фильтрации Joomla whitelist / blacklist у меня также настроены корректно.

Буду рад любой помощи - хотелось бы получить простые и понятные инструкции (я использую Joomla 1.5.10). 

(090528) leolll: Вы сделали настройки фильтрации абсолютно так же, как рекомендовалось в статье [4]? 

(090528) shoulders: Да, и после этого я попытался вставить в статью куски PHP-кода и другого кода со специальными символами, но при открытии такой статьи в редакторе фронтэнда они исчезают. В качестве редактора фронтэнда я использую FCKeditor. Если я открываю код во фронтенде, то его портит или FCKeditor, или Joomla. Поскольку я отключил перекодировку в FCKeditor, то я предполагаю, что эти действия делает Joomla. 

Я потратил много времени в попытках решить эту проблему. 

(090528) leolll: Если предположить, что Вы полностью следовали инструкциям [4], и это не помогло, то попытайтесь сделать следующее. 

Сначала запретите FCK. Вам не нужно больше переменных, введенных в уравнение отладки. 

Перейдите в Extensions -> Plug-ins, кликните Editor - TinyMCE 2.0. Установите следующие опции: 

- Code Cleanup on Startup = No
- Code cleanup on save = Never
- Do not clean HTML entities = Yes
- Prohibited Elements = ЗДЕСЬ ВСЕ УДАЛИТЕ 

Если это не сработает, то покажите пример кода, который Вы пытаетесь вставить в статью. 

(090528) shoulders: Привет, leolll. Я выполнил в точности все, что советовали, tiny mce добавляет < p > и удаляет пустые строки. 

И когда я пытаюсь делать это без редактора, то я нашел, что joomla не меняет статью, когда я делаю сохранение без редактора. 

Если я пытаюсь использовать JCE editor, то тот же результат, как в TinyMCE: основные пустые стоки удаляются, и вместо них добавляются < p >. 

FCK editor - это тот редактор, который я хочу использовать, меняет некоторые специальные символы, и код примеров, который я вставляю в статью, теряется. 

Я использую geshibot для инкапсуляции кода и приведения его к красивому оформлению. Просто вставляю пример кода, который мне нужен, а в результате получаю нечто в виде мусорного текста. 

Так что когда в Joomla отключена фильтрация (правильно настроены whitelist/blacklist в глобальных настройках статей), то Joomla не должна удалять любой введенный HTML. Редакторы отвечают за изменение статей при их загрузке и сохранении. Вот пример кода, который я пытаюсь вставить в статью, пока безуспешно:

{geshibot lang="php"}< ?php
 $host = "dbXX.oneandone.co.uk";$db = "dbXXXXXXXX";$dbuser = "pXXXXXXX";$dbpw = "XXXXXXX";
 
MYSQL_CONNECT($host, $dbuser, $dbpw) or die ( "< H3>Database Server could not be reached< /H3>");
MYSQL_SELECT_DB($db) or die ( "< H3>Database not Available< /H3>");
 $path = getenv('DOCUMENT_ROOT')."/DB_backup";$result = MYSQL_QUERY("SHOW TABLES");
 $numrow = MYSQL_NUM_ROWS($result);
 for($i = 0;$i < $numrow;$i++) {
  $table = MYSQL_RESULT($result,$i);
  echo "$table ... ";
  system(sprintf("mysqldump --opt -h $host -u $dbuser -p$dbpw $db $table | gzip > %s/$table.sql.gz",$path));
  echo "DONE\n\n";
}
 
MYSQL_CLOSE();
 ?>{/geshibot}

(090602) matthewham: Привет Leolll, благодарю за ответ и совет. Прошу прощения за то, что долго не отвечал на Ваш запрос... Я должен был отложить работу над этим проектом на последние 10 дней, и только теперь есть возможность вернуться к нему. 

Я попробовал Ваш совет загрузить Firefox в безопасный режим (Safe mode), но все напрасно. Остаюсь сконфуженным, и буду рад получить еще какие-нибудь идеи. Снова благодарю, Matt. 

(090609) tubaboy: У меня та же проблема, я выполнил все инструкции [4], и проблема все еще осталась, но для добавления / редактирования статей, просто для полей в компоненте community builder. Я использую tiny MCE, проклятая штука выкусывает все после & nbsp ;, что ввожу в виде текста! 

Это происходит во фронтэнде и в бакэнде под суперадмином, когда я редактирую поле bio в компоненте community builder. Это просто происходит со сторонними компонентами? 

(090609) leolll: Перейдите в Extensions -> Plug-ins, кликните Editor - TinyMCE 2.0. Установите следующие опции: 

- Code Cleanup on Startup = No
- Code cleanup on save = Never
- Do not clean HTML entities = Yes
- Prohibited Elements = ЗДЕСЬ ВСЕ УДАЛИТЕ

(090609) tubaboy: Все эти шаги я давно проделал, не помогло, никакого эффекта... Есть какие-нибудь другие предложения? 

(090609) leolll: Вы используете FireFox? Не уверен что сработает, но попробуйте использовать IE. Аддоны для FireFox (наподобие Greamonkey) могут модифицировать HTML веб-страниц. Попробовать стоит. 

(090609) tubaboy: Я тестировал в IE, все то же самое - но этой проблемы нет, когда я редактирую статьи в бакэнде, проблема только когда редактируются профили community builder. Попробую задать вопрос на форумах CB... 

(090609) tubaboy: OK, следующий тест, у меня есть другой сайт с использованием CB, я просто попытался в нем, NO STRIPPING (HTML не портится). Так что я посмотрел настройки tiny MCE на работающем сайте, и поменял установки, чтобы они соответствовали рабочим: 

Code cleanup on startup off
Code cleanup: Always
Do Not Clean HTML entities No 

Вуаля, больше нет стриппинга... пойди разберись, в чем проблема. 

(090609) leolll: Замечательно! Рад что Вы разобрались. 

(090609) tubaboy: Да... в этом месте работает. Я просто попытался вставить несколько параграфов из вордовского документа doc, но стриппинг появился снова... Как маленькое утешение - все-таки я могу вводить & nbsp ;. 

(090903) pallavan: Совет из [4] мне помог. Тег < object > не был вырезан. 

(091007) Radix__: Попробовал последовать совету по настройкам установок: 

- Code Cleanup on Startup = No
- Code cleanup on save = Never
- Do not clean HTML entities = Yes 

Но в моей Joomla 1.5.14 нигде не нашел установки "Do not clean HTML entities"! Кто-нибудь подскажет, где это настраивается? 

(091106) skulldragon: Присоединяюсь. Где найти настройку "Do not clean HTML entities"? Сыт по горло этим дрянным редактором, выбрасывающим мои теги. Пытался отключить редактор MCE, и просто отредактировать статью без редактора, но получил зависающую белую страницу в поле редактирования. То же самое происходит и для FCK editor, так что я в тупике, не могу заставить редакторы работать. 

(091106) tubaboy: Я начал испытывать проблемы, используя Joomla 1.5.9, CB 1.2, если это имеет значение... Но мои пользователи постоянно мне пишут, жалуясь, что все то, что они вставляют в редакторе в своем профиле, сохраняют, и после этого части или все содержимое введенного текста теряется... и при этом у них нет затруднений на других социальных сайтах сети... и я много раз обращался с вопросами в разных постах начиная с июня, но до сих пор не нашел решения проблемы. Пока я пишу пользователям обратно, чтобы они не использовали редактора, что работает, но такое обходное решение мне не нравится. 

Я был бы рад даже заплатить за решение проблемы. 

Может быть, это будет подсказкой - как админ я не использую визуальный редактор (опция редактирования no editor) в бакэнде CB, или у меня будет та же самая проблема. 

Пожалуйста, помогите. 

(091106) dhuelsmann: @tubaboy: начну с совета обновиться до версии Joomla 1.5.15, затем установить опции фильтрации Настроек Менеджера статей, и затем перейти в раздел плагинов, и отредактировать настройки TinyMCE 2.0, чтобы гарантировать, что функциональность выставлена в расширенную (extended), и Code Cleanup on Startup установлен в off, и Code cleanup on save установлен в Never, и delete whatever установлен в Prohibited Elements (см. [4]). 

(091107) tubaboy: это можно было бы попробовать, но я хотел бы избежать обновления. 

Хочу уточнить: проблема есть в Community Builder и возможно не связана с созданием / редактированием статьи. Короче говоря, у меня все еще есть проблема с выкусыванием кода при редактировании под пользователем / профилем, и (снова) попробую найти помощь на форумах CB... 

(091113) Radix__: Осмелюсь повторить вопрос, в версии Joomla 1.5.15: куда подевалась настройка "Do not clean HTML entities"? 

(091114) dhuelsmann: Entity Encoding = Raw. 

(100405) philbo: Что очень печально, я попробовал все предложенные решения, рекомендованные здесь, и не добился никакого результата. У меня заработал только грубый хак, и только если статья редактировалась прямо в базе данных, и код статьи после этого не загружался и не переключался в tinyMCE. Вот моя конфигурация: 

Joomla 1.5.15, tinyMCE editor

Article Manager Config
---------------------
Добавил всех пользователей в белый список 

tinyMCE editor
--------------
- Code Cleanup on Startup = No
- Code cleanup on save = Never
- Entity Encoding = Raw
- Prohibited Elements = я отредактировал в null в базе данных (бакэнд): но происходит странная вещь, каждый раз когда открывается интерфейс, то в поле ввода появляется текстовая запись "script,applet,iframe"...

Затем я попробовал ввести в статью следующий код PHP: 

< ?php echo date('Y-m-d H:i:s');?>

При переключении между HTML/plain код PHP был уничтожен независимо от того, было ли какое-то сохранение или обновление в базе данных. 

Когда я взломал код бакэнда в filterinput.php, чтобы не выкусывался PHP, и выполнил следующее: 

1. Вставил код PHP в tinyMCE, и не переключился на edit source,
2. успешно сохранил,
3. при новой загрузке статьи в редактор код PHP снова оказался выкушенным. 

Выводы: Вы все-таки можете добавить строки PHP, редактируя базу данных, и не загружая или редактируя после этого текст статьи в редакторе. Вот хак filterinput.php:

< ?php function _remove($source)
{
   $loopCounter = 0;
 
   // предотвращение атаки sql injection
   $source = str_replace("'", "'", $source);
 
   // итерации, предоставляющие защиту во вложенных тегах
   //while ($source != $this->_cleanTags($source))
   //{
   //   $source = $this->_cleanTags($source);
   //   $loopCounter ++;
   //}
   return $source;
}?>

(100521) aravindha: Расскажу о своей проблеме. 

Использую Joomla 1.5.15 и TinyMCE Editor 2.0. Пытаюсь установить Google cart / checkout на моей веб-странице. Каждый раз, когда я вставляю < form action="abdcdedf......" target="_top">, и делаю предпросмотр кода, то кнопка работает нормально. Но после того, как я сохранил статью, и отрываю её в браузере (пробовал в Chrome, Opera, IE 8, Firefox), то кнопка не работает, и когда я возвращаюсь обратно к редактированию и проверяю HTML, то не нахожу ранее введенного тега < form action>, там есть только < form tag="_top"> и некоторые другие параметры < form>. 

Я пытался использовать вариант редактирования 'no editor', использовал JCE Editor, 'xvalidator', и затем попробовал 'tinymce 2.0' --> везде результат одинаковый, из HTML выкусывались / вычищались теги, что меня очень раздражает. 

Просматривая форумы Joomla, как и Help в Google Checkout, я предполагал, что причина могла быть в одном из редакторов, и просмотрел все -- и теперь, когда я использую - я модифицировал и его установки, в соответствии с разными советами. Параметры настройки редактора редактировались отдельно, в разделе prohibited settings. Я удалил все, что там было, но после того, как я сохранил свой код HTML, и вернулся обратно в просмотр установок редактора, то снова увидел там все те же 'applet, iframe, script'... Не понимаю, что происходит! И мне нужно начать работать как можно скорее... 

Я также просмотрел вики, как и другие советы по этой теме. Мне не хотелось бы взламывать ядро до того, как я попробую какие-либо другие предложения, которые надеюсь найти здесь. Если кто-нибудь может помочь, буду очень признателен. За все заранее благодарю. 

(100601) wrp103: У меня те же проблемы с Joomla, связанные с выкусыванием элементов HTML. Использую Joomla 1.15.12, работающую в Firefox на Windows XP со всеми текущими обновлениями. Пытался также работать в IE, но результаты те же самые. Я попробовал все советы в этой ветке (не относящиеся к взлому ядра Joomla), но все бесполезно. 

Я создал простейший компонент наподобие примера "Hello, World", за исключением того, что у меня 2 текстовых поля - одно короткое текстовое поле для имени, и другое поле для ввода текста, у которых должны быть теги HTML. 

Я сконфигурировал tinyMCE, чтобы он не разворачивал элементы кода (not strip elements), но элементы кода все равно обрабатываются / выкусываются. Я все равно теряю теги форматирования, которые были применены с помощью tinyMCE - как в визуальном режиме, так и в режиме прямого редактирования HTML. 

Тогда я удалил tinyMCE JS так, что получил просто пустое поля текста, и при этом теги HTML все равно выкусывались. Так что моя проблема скорее всего не связана с каким-то редактором, а скорее есть что-то еще, которое удаляет теги HTML. 

Очень странно - я могу добавить элементы форматирования HTML в статьи, используя tinyMCE, но по каким-то причинам содержимое моего компонента выкусывается. Есть какие-нибудь предложения? 

(100602) aravindha: Если кто-то знает что-нибудь по этой проблеме, просветите нас. Заранее благодарю. 

(100603) wrp103: Я все еще интересуюсь изучением "правильного" способа решить эту проблему, но чтобы начать хоть как-то работать, мне было нужно обходное решение. Я реализовал ввод тегов HTML в двойных скобках вместо одиночных угловых, и написал код, который заменяет двойные скобки на корректные теги. Пример:

[[p]]Это параграф[[/p]]

Затем в моем view, я добавил этот код:

< ?php
$textin = $this->greeting;
$search = array("[[","]]");
$replace = array("< ",">");
$textout = str_replace($search,$replace,$textin);
echo $textout;
?>

В результате в статье сгенерировался код:

< p>Это параграф< /p>

Это не лучшее решение, но так я хотя бы могу теперь работать, и добавлять нужный контент вместо того, чтобы биться головой об стену. ;^) 

(100603) aravindha: Вы не могли бы проверить, будет ли этот код хорошо работать вместе с тегом < form action>? 

(100603) wrp103: Я пока не использую формы. У меня просто есть серия статей, где каждая статья содержит ссылки на одну или несколько других статей. 

(100603) aravindha: ОК, благодарю. Я попробую Ваш совет и вернусь, как только проделаю испытания. Если Вы узнаете что-то новое по вопросу, то пожалуйста напишите здесь. Большое спасибо. 

(100607) swimman13: И по некоторым причинам то же самое только что начало происходить на одном из моих сайтов, где я не делал никаких изменений в настройках TinyMCE. После публикации приблизительно 2000 событий в jEvents, используя редактор без всяких проблем, теперь внезапно элементы form для наших самодельных кнопок начали вырезаться. То же самое происходит и с JCE Editor, даже когда очищены и выключены все опции фильтрации HTML, как это и было изначально. Даже когда я выбираю способ редактирования без редактора (no editor), теги в коде HTML все равно выкусываются. Я использую Joomla 1.5.15 и недавно обновился на Joomla 1.5.18, потому что думал, что это поможет решить проблему. Но все безуспешно. 

(100727) netefficacy: Добавлю к этому треду еще одну мысль. 

У меня есть пользовательский компонент (custom component) на Joomla 1.5.8. В бакэнде (админка Joomla) у меня есть страничка с двумя экземплярами TinyMCE. Когда я кликаю на кнопке Сохранить, мой метод save в модели выкусывал HTML из областей текста в данные формы (form POST data). Решение было в добавлении JREQUEST_ALLOWHTML к запросу метода вызова к методу save в модели. Например: 

$data = JRequest::get( 'post', JREQUEST_ALLOWHTML);

Обсуждение см. здесь: How to clean array before writing in database? forum.joomla.org

(100728) aehanson: Это весьма старая проблема, но я все еще не вижу решения... Работаю в Joomla версии 1.5.19, использую JCE Editor 1.5.7.4 и пытаюсь вставить код, чтобы разрешить работу слайд-шоу Picasa от Google. Вот что я вставляю: 

< embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf"width="288"
 height="192" flashvars="host=picasaweb.google.com&hl=en_US&feat=flashalbum ... тут длинная ссылка описания альбома Picasa ..."
 pluginspage="http://www.macromedia.com/go/getflashplayer">
< /embed>

И вот что получается после сохранения:

< object width="288" height="192"> < param name="src"value="http://picasaweb.google.com/s/c/bin/slideshow.swf" />
< param name="contenteditable" value="inherit" />< embed type="application/x-shockwave-flash"
 width="288" height="192" src="http://picasaweb.google.com/s/c/bin/slideshow.swf">< /embed>< /object>

Я пытался изменить фильтры, и другие параметры настроек... Все напрасно! 

(101206) hnmxport: Я знаю, что это звучит как избиение мертвой лошади. Я много часов пытался запретить Joomla 1.5.22 выкусывать параметры action в моей кнопке paypal. 

Я изменил настройки фильтра для статьи так, что в blacklist попали все, кроме super administrator, и настроил JCE 1.5.7.6 -> control panel -> configurations так, что Cleanup HTML установлено в "no", но все еще получаю все те же отрицательные результаты. Я просмотрел все посты и ссылки в этом треде, но мне никакие рекомендации не помогли. Может быть, я что-то упустил? 

(101206) dhuelsmann: Вы заходили в JCE, и меняли параметры group manager, чтобы разрешить html? И в конфигурацию JCE, чтобы выключить очистку HTML (turn off html cleanup)? B d Components/JCE Administration/Configuration, где iframe, который установлен в no - если Вы хотите использовать iframe, то установите это в yes. 

(101207) hnmxport: @dhuelsmann Не увидел опцию в параметрах закладки group -> edit, но я не включал PHP, javascript, css и XHTML (может быть, этот трюк позволит добиться цели). Во всяком случае это работает, я по-настоящему ценю Ваш совет. 

(110126) mdrobiul: Я также разрабатываю пользовательский компонент админки (custom admin component), и когда admin может вводить код html. Но коды html автоматически выкусываются и раскрываются. Как мне прекратить это? 

(110403) Kubo64: Надеюсь, мой совет кому-нибудь поможет... Я также ломал голову, пытаясь заставить редактор TinyMCE прекратить выкусывать код HTML. Также я испробовал все, что советовали на этом форуме. Поверьте, я даже многое попробовал дважды! И наконец решил попробовать использовать другой редактор, и ЭТО РАБОТАЕТ. Я загрузил CK_Editor (он весьма хорош, между прочим), и он загрузил мой HTML немедленно. Я хотел применить на своем сайте картинку Site Lock badge, и просто не мог сделать это, пока не стал использовать CK_Editor. 

Это может звучать как реклама, но я вовсе не менеджер по продвижению CK_Editor, просто подумал, что нужно поделиться этой информацией со всеми. 

Использую Joomla 1.6. Нигде не нашел ввод jfilter в упомянутом месте. 

(110707) darbunderscore: Joomla 1.6.4 вместе с Community Builder 1.4. Я задаюсь вопросом, решил ли кто-нибудь проблему с тегом < form action>, когда он выкусывается только в Community Builder? 

Пытаюсь поместить код кнопки для пользователей paypal на странице профиля пользователя CB, используя поле текстового редактора. Даже когда я установил настройку моего текстового редактора в none, этот код выкусывается. Специфически вырезается только часть action="url" следующего кода:

< form action="https://www.paypal.com/cgi-bin/webscr" method="post"> 

Чтобы локализовать проблему, я добавлял код в статью Joomla, и только ту часть в компоненте CB, которая выкусывалась.

Я пытался делать все, о чем мог подумать, настроил "Do not filter following tags on editor area fields:" (не фильтровать следующие теги в области редактора:) в конфигурации CB, закладка User Profiles. 

Я искал это на форумах CB, и даже поместил вопрос на их форумах, все бесполезно. Любая помощь позволит мне не разбить мою голову об стену... 

(110720) bufontenator: У меня теперь Joomla 1.7, и та же самая проблема. Установил JCE Editor, надеясь что он позволит исправить проблему. Бесполезно. Так что я отключил плагин TineyMCE все вместе, и это работает. Больше HTML не выкусывается. 

Вы можете запретить плагин, зайдя в extensions -> Plugin Manager -> Editor - TinyMCE -> установите в disabled. Кажется, что даже когда Вы установите другой редактор в качестве редактора по умолчанию, то все равно используются настройки из Tiny MCE. Сообщите мне, если мой совет кому-нибудь помог. 

(110808) 34Bears: Я тоже использую JCE Editor, и я выключил TinyMCE, и все еще получают выкусывание тегов из HTML. Я использую Microsoft Expressions 4 для составления html и затем копирую его, и вставляю в статью мои самодельные таблицы. Мои атрибуты плагина корректны, и я не знаю, в чем проблема. 

Я попробовал совет в посте (101207) hnmxport, но безуспешно. 

(110819) beneberle: Если здесь есть разработчики компонентов для Joomla 1.6/1.7, которые столкнулись с этом тредом, вот тут описано, что я сделал, когда пытался устранить проблему выкусывания кода HTML в визуальном редакторе, решение подсмотрел тут: Custom Modules / Components can't save HTML site:stackoverflow.com. 

Если коротко, то Вам нужно добавить filter="safehtml" в декларацию field:

< field name="description" type="editor" height="250" label="Description" filter="safehtml" 
description="More Info" buttons="true" />

Надеюсь, что это кому-нибудь пригодится.

(111009) manos_mei: JOOMLA 1.7, K2, JCE EDITOR 2.0.15. 

K2 -> Items -> Parameters -> Content -> Content Cleanup -> Introtext HTML Cleaanup... установите в "NO". 

Для меня заработало. Надеюсь, что это поможет. 

(111108) johnnybgoodwin: ОК, фактически следует признать, что одна и та же проблема появляется снова и снова... У меня был сайт на Joomla 1.7.0, и я установил tinyMCE в состояние extended, no code clean up, allow iframes and scripts, и т. д. Это все, что я увидел. Все еще выкусывается html при сохранении. 

Затем попробовал вариант no editor, все тоже самое. Обновился до Joomla 1.7.2. Безрезультатно. Попробовал JCE Editor. Все то же самое. Попробовал редактор Codemirror - без изменений, проблема осталась. 

Наконец, поскольку редактировать статью не получается, и мне надо было добавить в статью функцию доступа к архиву новостей, то я просто пошел и добавил код в mysql. Ведь это несерьезное решение для большинства людей, оно не подходит для частого использования, не так ли? 

Теперь про совет, который дал (110819) beneberle (Custom Modules / Components can't save HTML site:stackoverflow.com). Я ценю это как попытку дать совет, но не понимаю его! Нужно общее решение, который может использовать любой пользователь. 

(111111) denvarel: У меня та же самая проблема на Joomla 1.7.2 с шаблоном jxtc. У меня есть jxtc wallmodule с кодом, напрямую пришедшим из шаблона jumpstart. Когда я подготавливаю текстовое сообщение и сохраняю его, в момент сохранения я получаю полностью очищенный код. Я пробовал делать все - деактивировал все редакторы, устанавливал tinyMCE разными способами, все бесполезно. Я не могу вставить css напрямую в модуль.  

Я реплицировал jumpstart на другой сервер, где попробовал просто команду 'save' после открытия модуля. И получаю в результате очищенный код. 

Мне нужно решение, чтобы я мог вставлять теги div в модуль. 

(111114) natewlew: У меня такая же проблема на Joomla 1.7.2. Я отключил все: 

My Profile -> Editor - None
Global Configuration -> Editor - None
Plugins -> Editor - TinyMCE (disabled) 

Когда добавляю код в статью и сохраняю его, то он меняется странным образом. Код:

< pre xml:php>

 превращается в:

< pre />

Закрывающий тег pre и все после него превращается в: 

& lt ;/pre& gt ;

Мой единственный вариант решения проблемы - использовать phpmyadmin, чтобы редактировать статьи. 

(111129) webguydesigns: Проблема в фильтрах Joomla. Для Joomla 1.5 см. статью [4]. Для Joomla 1.7 сделайте следующее: 

1. В Менеджере Статей Joomla кликните кнопку Настройки.
2. В диалоге Настройки, кликните на закладку Text Filters.
3. Для группы Super Users, или любой другой, где находятся доверенные пользователи, установите Filter Type в состояние No Filtering. Убедитесь, что Вы установили так эту опцию только для тех групп пользователей, кому полностью доверяете, потому что тип фильтра (Filter Type) в состоянии без фильтрации (No Filtering) по существу позволит пользователю вставить в статью любой html-код. 

(111206) denvarel: Я попробовал Ваш совет (111129) webguydesigns, но все бесполезно. Выкусывание продолжается. Я не могу вставить HTML, потому что при сохранении форматирование теряется. Я пробовал деактивировать TinyMCE, редактировать без визуального редактора, редактор JCE, редактор Codemirror - ничего не работает. Нужен совет как можно скорее. 

(111208) simonron: Чтобы остановить выкусывание кода javascript, iframe, php и т. д. - я делал все, что советовали в этом треде. Да, абсолютно все - или как минимум проверил. Можно применить любой совет из них, и содержимое все равно будет выкусываться. 

Последний мой шаг (после того как я все перепробовал) является результатом нового аспекта Joomla 1.7 - как минимум для меня. Менеджер Статей -> Настройки -> функция фильтрации текста. 

Поскольку это часть сложной, но очень полезной системы ACL (Access Control List, список контроля доступа), я не удивился, что множество людей потратило много времени, чтобы найти его. 

Может быть непростой задачей настроить систему фильтрации для Ваших нужд - но для меня разрешение NO FILTERING для SuperAdmin оказалось именно тем, что надо. Опция Black Filter убивает все, что Вы ввели в редакторе - даже если Вы используете редактирование без визуального редактора (No Editor)! 

NO FILTERING также позволяет Медиа-Менеджеру из JCE Editor вставлять контент Vimeo и Youtube - иначе это все будет вырезано, независимо от других настроек. 

На поиск решения я потратил 2 дня. 

(111221) jfelisco: Мне помогло решение по ссылке [4]. 

(120122) tropikana99: Добавьте тег, который выкусывается, в поле Extended Valid Elements в Basic Options редактора TinyMCE, и это прекратить его выкусывание из атрибута action тега form, в редакторе статей или в пользовательских модулях HTML (custom html modules). 

Я добавил "action" в поле после установки фильтра в опциях статей для пользователя Super User, и это решило проблему. 

(120228) sirchipmonk: Этот тред был популярен в течение долгого времени, и я надеюсь, что кто-нибудь может помочь с моей проблемой. Использую Breezing Forms на Joomla 1.7. Так или иначе action url выкусывается из моего кода, так что форма ничего не делает, только обновляет страницу. 

Я не использую визуальный редактор кода, и предполагаю, что Breezing Forms и Joomla должны работать совместно, чтобы позволить представления формы, без выкусывания моего злополучного action url?.. 

Ранее у меня получалось позволить код для ввода в редакторах Joomla, но эти настройки похоже не решают проблему с Breezing Forms. Теги с action url продолжают выкусываться. Кто-нибудь поможет? 

(120327) bufontenator: Я СДЕЛАЛ ЭТО! Ранее я написал в посте решение, но оно работало для одного сайта, и не работало для других. Как и Вы все, я начал снова искать решение, и все-таки нашел его. 

Есть расширение Sourcerer [5], которое позволяет вставить код в любое место сайта, и ненавистная очищалка Joomla этот код не тронет. Я использовал Sourcerer на нескольких сайтах, и он работает замечательно. 

(120528) Jarod545: Я тоже использую Sourcerer на своих сайтах, и он отлично работает. 

(130415) da8iwr: В Joomla 1.5, 2.5 и 3.0 используйте JCE 154 до текущей версии 2.3 точно таким же способом, чтобы устранить выкусывание кода. Перейдите в Components -> JCE Editor -> Editor Profiles -> Default -> Editor Parameters -> Advanced, и затем выберите "Yes" для: 

Allow Javascript
Allow CSS
Allow PHP
XHTML Inline Scripts 

Теперь Вы можете вставлять [youtube] Video, flash, Facebook, Twitter и другой встраиваемый код. 

[Ссылки

1. How to stop Joomla from stripping HTML tags from form input? site:forum.joomla.org.
2. Stop Joomla From Stripping Out Code site:ostraining.com.
3. Опции фильтрации HTML контента статей Joomla.
4. Why does some HTML get removed from articles in version 1.5.8? site:docs.joomla.org.
5. Sourcerer site:extensions.joomla.org.