Каким будет правильный способ остановить пустое пространство, которое выдает ColdFusion?
Я знаю, что есть cfcontent
и cfsetting enableCFoutputOnly
. Каков правильный способ сделать это?
Каким будет правильный способ остановить пустое пространство, которое выдает ColdFusion?
Я знаю, что есть cfcontent
и cfsetting enableCFoutputOnly
. Каков правильный способ сделать это?
В дополнение к <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>
Вы можете изменить выход ColdFusion, получив доступ к буферу Outpout ColdFusion. Джеймс Браун недавно продемонстрировал это на нашей группе пользователей (Central Florida Web Группа пользователей разработчиков).
<cfscript>
out = getPageContext().getOut().getString();
newOutput = REreplace(out, 'regex', '', 'all');
</cfscript>
Отличное место для этого было бы в Application.cfc onRequestEnd(). Результатом может быть одна строка HTML, которая затем отправляется в браузер. Работайте с вашим веб-сервером в GZip, и вы значительно сократите пропускную способность.
В терминах тегов существует cfsilent
В администраторе есть параметр "Включить управление пробелами"
Если ни <cfsilent>
, ни <cfsetting enablecfoutputonly="yes">
не могут удовлетворить вас, возможно, вы, вероятно, переработали эту проблему.
Когда вы спрашиваете исключительно из эстетических соображений, моя рекомендация: игнорировать пробелы, это не наносит вреда.
Я обнаружил, что даже используя все возможные способы устранения пробелов, ваш код может по-прежнему иметь некоторые нежелательные пробелы или разрывы строк. Если вы все еще испытываете это, вам может понадобиться пожертвовать хорошо сформированный код для желаемого результата.
например, вместо:
<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.
НТН
В качестве альтернативы вы можете обеспечить, чтобы вся ваша страница хранилась в переменной, и вся эта обработка выполняется в тегах cfsilent. например.
<cfsilent>
<!-- some coldfusion -->
<cfsavecontent variable="pageContent">
<html>
<!-- some content -->
</html>
</cfsavecontent>
<!-- reformat pageContent if required -->
</cfsilent><cfoutput>#pageContent#</cfoutput>
Наконец, вы можете выполнить любую дополнительную обработку после того, как вы сгенерировали pagecontent, но перед ее выходом, например. регулярное выражение для удаления дополнительных пробелов или некоторого кодирования кода.
Вот совет, если вы используете CFC.
Если вы не ожидаете, что ваш метод сгенерирует какой-либо вывод, используйте output="false"
в <cffunction>
и <cfcomponent>
(не нужно, только если вы используете стиль CF9 script). Это устранит много нежелательных пробелов.
Если у вас есть доступ к серверу и вы хотите его реализовать на каждом запросе запроса страницы и установите trimflt.jar. Это фильтр сервлетов Java, который удалит все пробелы и разрывы строк перед отправкой. Снимите банку в каталоге /WEB -INF/lib из CF и отредактируйте файл web.xml, чтобы добавить фильтр. Его конфигурация также позволяет удалять комментарии, исключать файлы или расширения и сохранять определенные строки. Бежал в течение нескольких лет без проблем. Установите его и забудьте его решение.