如何在 CFML 中填充模板字符串
How to populate a template string in CFML
请原谅这里的新手问题,但我试图在从查询中提取的字符串中允许自定义变量,并将其替换为另一个查询的结果。所以为了简化它,我需要这样的东西......
<cfset mystring = "This is my %firstname% and this is my %lastname%.">
然后假设我有 MyQuery,first 和 MyQuery.last 的查询结果,我想用最有效的方法将 mystring 中的 %firstname% 和 %lastname% 替换为查询结果。
任何 help/example 将不胜感激!
谢谢。
如果您有这样的查询:
<cfquery name="myquery" datasource="mydatasource">
select firstname, lastname from users
</cfquery>
然后您将通过执行以下操作输出其中的值:
<cfoutput query="myquery">
<cfset variables.mystring = "This is my #firstname# and this is my #lastname#.">
</cfoutput>
您在寻找 replaceNoCase() 吗?
<cfset myNewString = replaceNoCase(myString, '%firstname%', myQuery.first, 'all')>
<cfset myNewString = replaceNoCase(myNewString, '%lastname%', myQuery.last, 'all')>
如果您使用的是 Lucee,那么您可以利用 replace(string, struct)
(显示 cfscript 语法):
template = "This is my %firstname% and this is my %lastname%.";
replaceMap = {
"%firstname%" : "John"
,"%lastname%" : "Doe"
}
populated = replace(template, replaceMap); // use replaceNoCase() for case-insensitivity
所有替换都发生在 Java 代码中,这比在 CFML 循环中执行更有效。
此外,replace()
比 replaceNoCase()
更有效,因此如果事先知道 CaSe,您应该尽可能使用 replace()
,或者考虑将大小写标准化,例如在调用 replace()
.
之前使用 lcase()
请原谅这里的新手问题,但我试图在从查询中提取的字符串中允许自定义变量,并将其替换为另一个查询的结果。所以为了简化它,我需要这样的东西......
<cfset mystring = "This is my %firstname% and this is my %lastname%.">
然后假设我有 MyQuery,first 和 MyQuery.last 的查询结果,我想用最有效的方法将 mystring 中的 %firstname% 和 %lastname% 替换为查询结果。
任何 help/example 将不胜感激!
谢谢。
如果您有这样的查询:
<cfquery name="myquery" datasource="mydatasource">
select firstname, lastname from users
</cfquery>
然后您将通过执行以下操作输出其中的值:
<cfoutput query="myquery">
<cfset variables.mystring = "This is my #firstname# and this is my #lastname#.">
</cfoutput>
您在寻找 replaceNoCase() 吗?
<cfset myNewString = replaceNoCase(myString, '%firstname%', myQuery.first, 'all')>
<cfset myNewString = replaceNoCase(myNewString, '%lastname%', myQuery.last, 'all')>
如果您使用的是 Lucee,那么您可以利用 replace(string, struct)
(显示 cfscript 语法):
template = "This is my %firstname% and this is my %lastname%.";
replaceMap = {
"%firstname%" : "John"
,"%lastname%" : "Doe"
}
populated = replace(template, replaceMap); // use replaceNoCase() for case-insensitivity
所有替换都发生在 Java 代码中,这比在 CFML 循环中执行更有效。
此外,replace()
比 replaceNoCase()
更有效,因此如果事先知道 CaSe,您应该尽可能使用 replace()
,或者考虑将大小写标准化,例如在调用 replace()
.
lcase()