Подтвердить что ты не робот

Белое пространство/Coldfusion

Каким будет правильный способ остановить пустое пространство, которое выдает ColdFusion?

Я знаю, что есть cfcontent и cfsetting enableCFoutputOnly. Каков правильный способ сделать это?

4b9b3361

Ответ 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, и вы значительно сократите пропускную способность.

Ответ 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, чтобы добавить фильтр. Его конфигурация также позволяет удалять комментарии, исключать файлы или расширения и сохранять определенные строки. Бежал в течение нескольких лет без проблем. Установите его и забудьте его решение.