Экранирование и выход из HTML - PullRequest
0 голосов
/ 29 апреля 2018

В функции, которой я не управляю, данные возвращаются через

return xmlFormat(rc.content)

Я позже хочу сделать

<cfoutput>#resultsofreturn#</cfoutput>

Проблема в том, что все HTML-теги экранированы.

Я рассмотрел

<cfoutput>#DecodeForHTML(resultsofreturn)#</cfoutput>

Но я не уверен, что это противоположности друг другу

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

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

В текущем состоянии строка, с которой вы работаете, кодируется для XML-документа. Одним из вариантов является создание XML-документа с текстом и анализ текста обратно из XML-документа. Я не уверен, насколько эффективен этот метод, но он вернет текст обратно в его предварительно закодированное значение.

function xmlDecode(text){
    return xmlParse("<t>#text#</t>").t.xmlText;
}

Пример TryCF.com

0 голосов
/ 30 апреля 2018

Начиная с CF 10, вы должны использовать более новые функции encodeFor. Эти функции учитывают символы высокого ASCII, а также символы UTF-8.

Старый и Разоренный

  • XmlFormat()
  • HTMLEditFormat()
  • JSStringFormat()

Новая Жара

  • encodeForXML()
  • encodeForXMLAttribute()
  • encodeForHTML()
  • encodeForHTMLAttribute()
  • encodeForJavaScript()
  • encodeForCSS()

Вывод этих функций отличается в зависимости от контекста.

Затем, если вы получаете только экранированный HTML, вы можете конвертировать его обратно, используя Jsouo или библиотеку Jakarta Commons Lang. Есть несколько примеров в соответствующем ответе SO .

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

...