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

时间:2011-08-25 17:22:06

标签: 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;
}

您知道解决方案吗? ++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++ ANSWER

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

LOCAL.Properties = " value='#ARGUMENTS.Value#'";

然后,删除单引号并替换为转义双引号:

LOCAL.Properties = " value=""#ARGUMENTS.Value#""";

虽然这仍然会阻塞这样的字符串:

MyString = "This is my F#@'''""$":""ing  problem!";

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

LOCAL.Properties = " value=""#htmlEditFormat(ARGUMENTS.Value)#""";

感谢您的帮助!!!

3 个答案:

答案 0 :(得分:4)

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

<input value=#myvar#>

此处的解决方案是引用您的属性,例如:

<input value="#myvar#">

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

<input value='#myVar#'>

最终会成为:

<input value='value with a ' in it'>

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

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

要解决此类问题,请始终查看HTML源代码。这将帮助您了解正在发生的事情。

注意:每个人都提到preserveSingleQuote():这个函数在CFQUERY块之外没有任何作用。所以这不会有帮助。

答案 1 :(得分:2)

您遇到的问题与值字段的字符分隔符有关。如果您使用单引号作为字段分隔符,并且您的应用提供了单引号,则会出现问题。我过去处理过这种情况的一种方法是在场上使用双引号。下面显示的行应插入您的代码中:

LOCAL.Properties = " value=""#preserveSingleQuotes(ARGUMENTS.Value)#""";

Sean Kimball所展示的方法同样有效。根据情况,我使用了两种方法。

还有另一条评论:preserveSingleQuotes。我不能说我已经在数据库调用之外使用了这个,但是如果它在这种情况下适合你,我也学到了一些东西!

答案 2 :(得分:0)

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

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