Отображение другой переменной внутри CFOUTPUT

У меня есть заметка для людей в формате длинного текста. Итак, этот дисплей:

 <cfoutput>
 #maindata#
 </cfoutput>

И давайте скажем, что данные представляют собой кучу бла-бла-бла, и больше текстовых данных, бла-бла, которые выводятся правильно.

То, что я пытаюсь сделать, это добавить дополнительную заметку о переменной внутри LongText

Итак, в текстовых данных я пробовал.

  #set.newnote#

Я пробовал эти 2 без везения:

 #Variables[set.newnote]#
 #evaluate(set.newnote)# 

Мне не везет. Возможно ли это, или мне нужно выйти из вывода, чтобы добавить дополнительный вывод после.


person Merle_the_Pearl    schedule 11.10.2020    source источник
comment
Что вы имеете в виду под add an additional variable note inside the "LongText"?   -  person Thum Choon Tat    schedule 12.10.2020


Ответы (2)


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

Вы можете сделать это, используя комбинацию evaluate() и de() следующим образом:

<cfset mockDBText = "The ##x.a## jumps over the ##x.b##." />
<!--- the double ## above is just for escaping a single # - in your DB you would not need ## --->
<cfoutput>#mockDBText#</cfoutput>
<cfset x.a = "quick brown fox" />
<cfset x.b = "lazy dog" />
<cfoutput><br /> #evaluate(de(mockDBText))#</cfoutput>

... однако остерегайтесь огромных рисков безопасности при выполнении этого с любым текстом, полученным из пользовательского ввода - более подробно объясняется, например, здесь: https://www.bennadel.com/blog/3861-evaluating-database-records-that-contain-coldfusion-interpolation-expressions-in-adobe-coldfusion-2018.htm

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

person Sev Roberts    schedule 12.10.2020

<cfscript>
mainData = "blah blah blah";
moreData = "more more more";
writeOutput(mainData & moreData);
</cfscript>

or

<cfoutput>#mainData##moreData#</cfoutput>

или если вы хотите вставить больше данных в mainData:

<cfscript>
newString = Left(mainData, 1, 5) & moreData & Right(mainData, 6, Len(mainData)-5));
writeOutput(newString);
</cfscript>

И еще одно замечание... никогда не используйте Evaluate(nonSanitizedUserText), иначе вы откроете свое приложение для инъекций.

person Redtopia    schedule 11.10.2020
comment
Во втором примере нет необходимости делать конкатенацию строк, вы также можете сделать <cfoutput>#maindata# #moreData#</cfoutrput> - person Scott Stroz; 12.10.2020
comment
Не то, что я ищу. У меня это исправлено только с отдельным выходом. Но это не совсем так. Он извлекает текстовые данные из базы данных Long Text Type. И в эти данные я пытаюсь вставить дополнительные #moredata#, которые поступают из этой базы данных, извлеченной из текста. Он не отображает строку переменной, а только #moredata# в виде текста. Я не думаю, что смогу это сделать. - person Merle_the_Pearl; 12.10.2020
comment
Мне непонятно, в чем проблема, которую вы пытаетесь решить. Тип длинного текста будет обрабатываться CF так же, как и любой текст. Вы написали: Что я пытаюсь сделать, так это добавить дополнительную примечание к переменной внутри LongText... это говорит мне, что вам нужно создать новую строку... так что, возможно, вам нужно использовать комбинацию строковых функций для создания новой нить? - person Redtopia; 12.10.2020