Я решил эту проблему (для моего случая), убедившись, что содержащие элементы пользовательского интерфейса отображают до диаграммы, позволяя Highcharts вычислять правильную ширину.
Например:
До:
var renderChart = function(){
...
};
renderChart();
После:
var renderChart = function(){
...
};
setTimeout(renderChart, 0);
ColdFusion не исключает всех одинарных кавычек, а только тех, которые поступают в запрос через интерполяцию переменных. Это преступник:
SELECT #Arguments.strSelectAttributes#
Обычно это полезная вещь и небольшая линия защиты от атак SQL-инъекций. Итак, правило номер один (здесь и везде): не создавайте строку SQL из переменных.
Если вы обязательно должны использовать переменные для построения строки SQL, несмотря на все возможные негативные эффекты, используйте функцию PreserveSingleQuotes ()
:
SELECT #PreserveSingleQuotes(Arguments.strSelectAttributes)#
Эта функция останавливает ColdFusion от автоматическое экранирование одинарных кавычек.
И любой другой вызов функции, кстати, делает то же самое. Попробуйте:
SELECT #LCase(Arguments.strSelectAttributes)#
, что означает, что PreserveSingleQuotes () на самом деле просто бездействие, которое превращает строку в результат функции,
Поместите вызов preserveSingleQuotes () вокруг вашей переменной. Он создан специально для написания динамического SQL. Кроме того, вы действительно должны использовать cfqueryparam для своих значений, и я надеюсь, что вы каким-то образом дезинфицируете свой ввод, чтобы arguments.strSelectAttributes не мог содержать что-то вроде '; drop table groups; в нем.
<cfquery name="getObjectInfo" datasource="#Application.DataSource#">
SELECT #preserveSingleQuotes(Arguments.strSelectAttributes)#
FROM Groups
WHERE Group_ID = <cfqueryparam value="#Arguments.intGroupID#" cfsqltype="cf_sql_integer"/>
</cfquery>
Если вы действительно хотите очистить код, второй шаг - преобразование этих спагетти в хранимые процедуры.