我正在使用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)#""";
感谢您的帮助!!!
答案 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));