ColdFusion - 如何将单引号输出到文本字段中?

Evi*_*mes 2 coldfusion coldfusion-9

我正在使用 ColdFusion 9。

我找不到将单引号成功输出到文本字段的方法。

我使用 CFSCRIPT 用户定义函数创建表单域。(为了简单起见,我已经最小化了这个例子的选项。)

当我的输出包含单引号时,文本字段会完全搞砸,请务必运行示例并查看 HTML。我已经尝试过使用 PreserveSingleQuotes() 每一种可能的方式。

// USE EITHER STRING
MyString = "This string works fine.";
MyString = "This single quote's the problem!";
writeOutput(createInputBox(MyString));

// CREATE TEXT INPUT
function createInputBox(Value) {
    LOCAL.Properties = " value='#preserveSingleQuotes(ARGUMENTS.Value)#'";
    LOCAL.Item = "<input size='50' type='text' #LOCAL.Properties# />";
    return LOCAL.Item;
}
Run Code Online (Sandbox Code Playgroud)

你知道一个解决方案吗?++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++ 答案

去掉preserveSingleQuotes() 函数,因为它在SQL 块之外什么都不做。(谢谢亚当!)。

LOCAL.Properties = " value='#ARGUMENTS.Value#'";
Run Code Online (Sandbox Code Playgroud)

然后,去掉单引号并用转义双引号替换:

LOCAL.Properties = " value=""#ARGUMENTS.Value#""";
Run Code Online (Sandbox Code Playgroud)

尽管如此,这仍然会在这样的字符串上窒息:

MyString = "This is my F#@'''""$":""ing  problem!";
Run Code Online (Sandbox Code Playgroud)

所以,像这样添加 htmlEditFormat() 函数:

LOCAL.Properties = " value=""#htmlEditFormat(ARGUMENTS.Value)#""";
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!!!

Ada*_*ron 5

单引号不应该给 HTML 中的属性值带来问题,除非: * 您没有引用属性值,例如:

<input value=#myvar#>
Run Code Online (Sandbox Code Playgroud)

这里的解决方案是引用您的属性,例如:

<input value="#myvar#">
Run Code Online (Sandbox Code Playgroud)

或 * 您引用的是您的属性,但使用的是单引号:

<input value='#myVar#'>
Run Code Online (Sandbox Code Playgroud)

最终会是:

<input value='value with a ' in it'>
Run Code Online (Sandbox Code Playgroud)

这 - 当然是无效的标记:浏览器将值视为“带 a 的值”,其余部分只是垃圾。

如果您需要这样做: * 切换到使用双引号分隔符 * 在变量值周围使用 htmlEditFormat() (这将转义嵌入的双引号)。

要解决此类问题,请始终查看 HTML 源代码。这将帮助您弄清楚发生了什么。

注意:对于提到preserveSingleQuote() 的每个人:这个函数在CFQUERY 块之外什么都不做。所以它在这里没有帮助。