ColdFusion - Как вывести одинарные кавычки в текстовое поле? - PullRequest
1 голос
/ 25 августа 2011

Я использую 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;
}

Знаете ли вы решение?++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ОТВЕТ

Избавьтесь от функции 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 ]

4 голосов
/ 25 августа 2011

Одиночная кавычка не должна вызывать проблем со значением атрибута в HTML, если только вы не * не цитируете значения атрибута, например:

<input value=#myvar#>

Решение здесь заключается в том, чтобы заключить в кавычки ваши атрибуты.Например:

<input value="#myvar#">

или * вы цитируете свои атрибуты, но используете одинарные кавычки:

<input value='#myVar#'>

В итоге получится:

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

This- конечно, недопустимая разметка: браузер видит значение как 'значение с a', а остальное - просто мусор.

Если вам нужно сделать это: * переключитесь на использование двойных кавычекразделители * используют htmlEditFormat () вокруг значения вашей переменной (это позволит избежать встроенных двойных кавычек).

Чтобы устранить подобные вещи, ВСЕГДА смотрите на источник HTML.Это поможет вам понять, что происходит.

Примечание: всем, кто упоминает preserveSingleQuote (): эта функция НИЧЕГО не выполняет вне блока CFQUERY.Так что здесь это не поможет.

2 голосов
/ 25 августа 2011

Проблема, с которой вы столкнулись, связана с разделителями символов для поля значения. Если вы используете одинарные кавычки в качестве разделителей полей, а в вашем приложении предусмотрена одинарная кавычка, возникнет проблема. Один из способов, с которыми я сталкивался в прошлом - использовать двойные кавычки для поля. Строка, показанная ниже, должна подключиться к вашему коду:

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

Подход, показанный Шоном Кимбаллом, одинаково действителен. В зависимости от ситуации я использовал оба подхода.

Был еще один комментарий: preserveSingleQuotes. Я не могу сказать, что я использовал это вне вызовов базы данных, но если это работает для вас в этой ситуации, я тоже кое-чему научился!

0 голосов
/ 25 августа 2011
// 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));
...