【问题标题】:How to set a variable with both single and double quotes?如何使用单引号和双引号设置变量?
【发布时间】:2015-09-02 07:22:44
【问题描述】:

如何在 ColdFusion 中设置一个在字符串中使用单引号和两个双引号的字符串变量?

MyVar = "Include multiple addresses on "Recipient's E-Mail" separated by commas.";

我知道我可以将其分解为几个变量或转义一些字符,但我想知道是否有一种标准的“最佳”方式,一种简洁易读的方式。

我可以这样做,但这很麻烦:

// THIS WORKS
MyVar = "Include multiple addresses on ";
MyVar = MyVar & '"Recipient's E-Mail "';
MyVar = MyVar & "separated by commas.";

我应该注意到我在函数中使用了 CFSCRIPT。这使得使用 savecontent 变得笨重。而且 CF 不喜欢 savecontent 中我的 var (LOCAL.Info[i].EmailProd07) 的名称,所以我不得不重命名它。

// THIS WORKS
savecontent variable="LOCAL.MyVar" {
writeOutput("Multiple recipients may be included in ""Recipient's E-Mail"" separated by commas.");
};
LOCAL.Info[i].EmailProd07 = LOCAL.MyVar;

// THIS WORKS
LOCAL.Info[i].EmailProd07 = 'Multiple recipients may be included in "Recipient''s E-Mail" separated by commas.';

【问题讨论】:

  • 你试过保存内容吗?
  • 我没有尝试保存内容。
  • (编辑)再想一想,我不认为 savecontent 会帮助你。
  • 反正不是脚本版本..

标签: coldfusion escaping


【解决方案1】:

CF DOC

转义引号和数字符号

在字符串中包含一个单引号字符 单引号,使用两个单引号(称为转义 单引号)。以下示例使用转义 单引号:

<cfset myString='This is a single-quotation mark: '' This is a double-quotation mark: "'> 
<cfoutput>#mystring#</cfoutput><br>

要在双引号字符串中包含双引号,请使用两个 双引号(称为转义双引号)。 以下示例使用转义的双引号:

<cfset myString="This is a single-quotation mark: ' This is a double-quotation mark: """> 
<cfoutput>#mystring#</cfoutput><br>

因为字符串可以用双引号或 单引号,前面的两个例子都显示 相同的文字:

This is a single-quotation mark: ' This is a double-quotation mark: "

我会补充:

<cfsavecontent variable="MyVar">
  Include multiple addresses on "Recipient's E-Mail" separated by commas.
</cfsavecontent>

如果空格很重要,要么在之后使用trim(),或者如果内容很短,只需将标签和内容保持在一行中,中间不要空格。

【讨论】:

  • 我在用 CFSCRIPT 写作,所以情况有些不同。我可以让保存内容工作,但名字很难。 (见上文)。
  • &lt;cfsavecontent&gt; 仅适用于解决您在 CFML 中的问题,而不是 CFScript。
  • 您也可以使用#chr(34)# 表示双引号,使用#chr(39)# 表示单引号。
  • 另一个 cfscript 友好的解决方法是将字符串保存到文件中,然后 fileOpen()fileRead(),但是为什么有人会这样做...
  • 或者将&lt;cfsavecontent&gt; 放在一个单独的 .cfm 中,并将其包含在您的纯脚本文件中。我喜欢脚本,但在某些情况下,标签会更好。
【解决方案2】:
MyVar = 'Include multiple addresses on "Recipient''s E-Mail" separated by commas.';
WriteOutput(MyVar);

关键是:

  1. 用单引号将字符串括起来以转义变量中的双引号
  2. 用另一个单引号转义变量中的单引号

编辑从这里开始

又是这样,但是单引号和双引号被交换了。

MyVar = "Include multiple addresses on ""Recipient's E-Mail"" separated by commas.";

同样有效

【讨论】:

  • 我喜欢在用双引号包裹字符串时保持一致,但你的答案很完美。
  • 是的,我知道如何切换它们。我只想尽可能少地触摸实际的字符串内容。谢谢!
  • 这表明了这一点,这个字符串从哪里来,一旦你有了它你会怎么处理它?
【解决方案3】:

您不能使用 CHR 功能吗? http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=functions_c-d_04.html

这意味着您只需将一组“”替换为正确的字符代码。

【讨论】:

    【解决方案4】:

    你需要使用转义字符

    通常是:\

    示例:

    字符串 a = "bla bla bla \' dsfdsf \' bla "

    【讨论】:

    • 这样有效吗?我没有尝试过,但我认为这没有记录在案。
    • 我发现尝试在这样的论坛上回答问题很有教育意义。
    • 不,它在 CFML 中不起作用。 CFML 没有这样的转义字符。正如其他人所建议的那样,要在用相同引号分隔的字符串中转义任何一种类型的引号(单引号或双引号)......将其加倍。 "双引号:"""; '单引号:'''
    • 我尝试的时候发生了什么? 它没有工作,很明显。因为它没有。
    猜你喜欢
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    相关资源
    最近更新 更多