Белое пространство/Coldfusion
Каким будет правильный способ остановить пустое пространство, которое выдает ColdFusion?
Я знаю, что есть cfcontent
и cfsetting enableCFoutputOnly
. Каков правильный способ сделать это?
Ответы
Ответ 1
В дополнение к <cfsilent>
, <cfsetting enablecfoutputonly="yes">
и <cfprocessingdirective suppressWhiteSpace = "true">
есть <cfcontent reset="true" />
. Вы можете удалить пробелы в начале документа с помощью.
HTML5-документ начнется следующим образом:
<cfcontent type="text/html; charset=utf-8" reset="true" /><!doctype html>
XML-документ:
<cfcontent reset="yes" type="text/xml; charset=utf-8" /><CFOUTPUT>#VariableHoldingXmlDocAsString#</CFOUTPUT>
Таким образом, вы не получите "Контент не разрешен в прологе" -error для документов XML.
Если вы получаете нежелательные пробелы из функции, используйте output
-attribute, чтобы подавить любой вывод и вернуть результат в виде строки - например:
<cffunction name="getMyName" access="public" returntype="string" output="no">
<cfreturn "Seybsen" />
</cffunction>
Ответ 2
Вы можете изменить выход ColdFusion, получив доступ к буферу Outpout ColdFusion. Джеймс Браун недавно продемонстрировал это на нашей группе пользователей (Central Florida Web Группа пользователей разработчиков).
<cfscript>
out = getPageContext().getOut().getString();
newOutput = REreplace(out, 'regex', '', 'all');
</cfscript>
Отличное место для этого было бы в Application.cfc onRequestEnd(). Результатом может быть одна строка HTML, которая затем отправляется в браузер. Работайте с вашим веб-сервером в GZip, и вы значительно сократите пропускную способность.
Ответ 3
В терминах тегов существует cfsilent
В администраторе есть параметр "Включить управление пробелами"
Дальше чтение на cfsilent и cfcontent reset.
Ответ 4
Если ни <cfsilent>
, ни <cfsetting enablecfoutputonly="yes">
не могут удовлетворить вас, возможно, вы, вероятно, переработали эту проблему.
Когда вы спрашиваете исключительно из эстетических соображений, моя рекомендация: игнорировать пробелы, это не наносит вреда.
Ответ 5
Я обнаружил, что даже используя все возможные способы устранения пробелов, ваш код может по-прежнему иметь некоторые нежелательные пробелы или разрывы строк. Если вы все еще испытываете это, вам может понадобиться пожертвовать хорошо сформированный код для желаемого результата.
например, вместо:
<cfprocessingdirective supressWhiteSpace = "true">
<cfquery ...>
...
...
...
</cfquery>
<cfoutput>
Welcome to the site #query.userName#
</cfoutput>
</cfprocessingdirective>
Возможно, вам понадобится код:
<cfprocessingdirective supressWhiteSpace = "true"><cfquery ...>
...
...
...
</cfquery><cfoutput>Welcome to the site #query.UserName#</cfoutput></cfprocessingdirective>
Это не CF-добавление пробелов, но вы добавляете пробелы при форматировании вашего CF.
НТН
Ответ 6
В качестве альтернативы вы можете обеспечить, чтобы вся ваша страница хранилась в переменной, и вся эта обработка выполняется в тегах cfsilent. например.
<cfsilent>
<!-- some coldfusion -->
<cfsavecontent variable="pageContent">
<html>
<!-- some content -->
</html>
</cfsavecontent>
<!-- reformat pageContent if required -->
</cfsilent><cfoutput>#pageContent#</cfoutput>
Наконец, вы можете выполнить любую дополнительную обработку после того, как вы сгенерировали pagecontent, но перед ее выходом, например. регулярное выражение для удаления дополнительных пробелов или некоторого кодирования кода.
Ответ 7
Вот совет, если вы используете CFC.
Если вы не ожидаете, что ваш метод сгенерирует какой-либо вывод, используйте output="false"
в <cffunction>
и <cfcomponent>
(не нужно, только если вы используете стиль CF9 script). Это устранит много нежелательных пробелов.
Ответ 8
Если у вас есть доступ к серверу и вы хотите его реализовать на каждом запросе запроса страницы и установите trimflt.jar. Это фильтр сервлетов Java, который удалит все пробелы и разрывы строк перед отправкой. Снимите банку в каталоге /WEB -INF/lib из CF и отредактируйте файл web.xml, чтобы добавить фильтр. Его конфигурация также позволяет удалять комментарии, исключать файлы или расширения и сохранять определенные строки. Бежал в течение нескольких лет без проблем. Установите его и забудьте его решение.