код в Groovy с рекурсивным отображением:
import groovy.json.JsonSlurper
def ff = session.get()
if(!ff)return
def json = ff.read().withReader("UTF-8"){r-> new JsonSlurper().parse(r) }
def mappings = json.remove('mappingvalues')
def mapper(o, mappings){
if(o instanceof Map){
//json object. let's iterate it and do mapping
o = o.collectEntries{k,v-> [ (mappings[k] ?: k), mapper(v,mappings) ] }
}else if(o instanceof List){
//map elements in array
o = o.collect{v-> mapper(v,mappings) }
}
return o
}
json = mapper(json,mappings)
ff.write("UTF-8"){w-> new JsonBuilder(json).writeTo(w) }
REL_SUCCESS << ff
Нет, не существует. В самом HTML нет никакого способа, кроме экранирования некоторых символов:
&
как &
<
как <
(Кстати, нет необходимости экранировать >
, но люди часто делают это из соображений симметрии. )
И, конечно, вы должны окружить полученный HTML-код
, чтобы (а) сохранить пробелы и переносы строк, и (б) пометить его как элемент кода. ...
Все другие решения, такие как обертывание кода в или (устаревший)
элемент, сломаются. 1
XHTML, который объявляется браузеру как XML (через заголовок HTTP Content-Type
! - просто установить DOCTYPE
- недостаточно) может альтернативно использовать секцию CDATA:
<![CDATA[Your <code> here]]>
Но это работает только в XML, а не в HTML, и даже это не является надежным решением, поскольку код не должен содержать закрывающий разделитель ]]>
. Поэтому даже в XML самым простым и надежным решением является экранирование.
1 Пример:
textarea {border: none; width: 100%;}
Компьютер говорит нет.
На самом деле там способ сделать это. Это имеет ограничение (один), но является 100%-м стандартом, не удержанным от использования (как xmp), и работы.
И это тривиально.Вот:
<div id="mydoc-src" style="display: none;">
LlNnlljn77fggggkk77csJJK8bbJBKJBkjjjjbbbJJLJLLJo
<!--
YOUR CODE HERE.
<script src="WidgetsLib/all.js"></script>
^^ This is a text, no side effects trying to load it.
-->
LlNnlljn77fggggkk77csJJK8bbJBKJBkjjjjbbbJJLJLLJo
</div>
позвольте мне объяснить. В первую очередь, обычный комментарий HTML делает задание, для предотвращения целого блока быть интерпретированным. Можно легко добавить в нем любые теги, все они будут проигнорированы. Проигнорированный от интерпретации, но все еще доступный через innerHTML
! Таким образом, что оставляют, должно получить содержание и отфильтровать предыдущие и запаздывающие маркеры комментария.
Кроме (помнят - ограничение) Вы не можете поместить там комментарии HTML внутри, с тех пор (по крайней мере, в моем Chrome), вложение их не поддерживается, и самый первый '->' закончит шоу.
ну, это - противное небольшое ограничение, но в определенных случаях это не проблема вообще, если Ваш текст свободен от комментариев HTML. И, легче выйти из одной конструкции, затем целый набор их.
Теперь, что то, что странно LlNnlljn77fggggkk77csJJK8bbJBKJBkjjjjbbbJJLJLLJo
строка? Это - случайная строка, как хеш, вряд ли чтобы использоваться в блоке и использоваться для? Вот контекст, , почему я использовал его. В моем случае я взял содержание одного DIV, затем обработал его со скидкой с цены Откровенного обмена мнениями и затем выводом, присвоенным в другое отделение. Идея была, чтобы записать скидку с цены, встроенную в файле HTML и просто открыться в браузере, и это преобразует на загрузке на лету. Так, в моем случае, <!--
стал преобразованным к <p><!--</p>
, комментарий правильно вышел. Это работало, но загрязнило экран. Так, для легкого удаления его с regex случайная строка использовалась. Вот код:
var converter = new showdown.Converter();
converter.setOption('simplifiedAutoLink', true);
converter.setOption('tables', true);
converter.setOption('tasklists', true);
var src = document.getElementById("mydoc-src");
var res = document.getElementById("mydoc-res");
res.innerHTML = converter.makeHtml(src.innerHTML)
.replace(/<p>.{0,10}LlNnlljn77fggggkk77csJJK8bbJBKJBkjjjjbbbJJLJLLJo.{0,10}<\/p>/g, "");
src.innerHTML = '';
И это работает.
, Если кому-то интересно, , эта статья записана с помощью этой техники. Не стесняйтесь загружать, и смотреть в файле HTML.
Это зависит, для чего Вы используете его. Это - ввод данных пользователем? Затем используйте <textarea>
и выйдите из всего. В моем случае, и вероятно это - Ваш случай также, я просто использовал комментарии, и это делает задание.
, Если Вы не используете скидку с цены и просто хотите получить ее, как от тега, затем это еще более просто:
<div id="mydoc-src" style="display: none;">
<!--
YOUR CODE HERE.
<script src="WidgetsLib/all.js"></script>
^^ This is a text, no side effects trying to load it.
-->
</div>
и код JavaScript для получения его:
var src = document.getElementById("mydoc-src");
var YOUR_CODE = src.innerHTML.replace(/(<!--|-->)/g, "");
Есть несколько способов избежать всего в HTML, и ни один из них не хорош.
Или вы можете вставить iframe
, который загружает простой старый текстовый файл.
Устаревший тег
по сути делает это, но больше не является частью спецификации XHTML. Однако он должен работать во всех текущих браузерах.
Вот еще одна идея, хитрость / уловка, вы можете поместить код в текстовое поле следующим образом:
<textarea disabled="true" style="border: none;background-color:white;">
<p>test</p>
</textarea>
Помещение угловых скобок и такого кода внутри текстовой области является недопустимым HTML и приведет к неопределенному поведению в разных браузерах. В Internet Explorer HTML интерпретируется, тогда как Mozilla, Chrome и Safari не интерпретируют его.
Если вы хотите, чтобы он был недоступен для редактирования и выглядел по-другому, вы можете легко стилизовать его с помощью CSS. Единственная проблема заключается в том, что браузеры добавят этот маленький маркер перетаскивания в нижний правый угол, чтобы изменить размер поля. Или, в качестве альтернативы, попробуйте вместо этого использовать тег ввода.
Правильный способ внедрения кода в текстовое поле - использовать язык на стороне сервера, например, этот PHP:
<textarea disabled="true" style="border: none;background-color:white;">
<?php echo '<p>test</p>'; ?>
</textarea>
Затем он обходит интерпретатор html и помещает неинтерпретированный текст в текстовое поле последовательно во всех браузерах.
Помимо этого, единственный способ - это действительно избежать кода самостоятельно, если используется статический HTML, или с помощью серверных методов, таких как .NET HtmlEncode (), если используется такая технология.
В конечном итоге лучший (хотя и раздражающий) ответ - «избежать текста».
Однако существует множество текстовых редакторов или даже автономных мини-утилит, которые могут делать это автоматически. Так что вам никогда не придется экранировать его вручную, если вы этого не хотите (если только это не смесь экранированного и неэкранированного кода ...)
Быстрый поиск в Google показывает мне это, например: http : //malektips.com/zzee-text-utility-html-escape-regular-expression.html
В HTML? Нет.
В XML/XHTML? Можно использовать блок CDATA
.
Не рекомендуется , но работает в FF3 и IE8.
<xmp>
<b>bold</b><ul><li>list item</li></ul>
</xmp>
Рекомендуется:
<pre><code>
code here, escape it yourself.
</code></pre>