2010-02-11 2 views
16

Что было бы правильным способом остановить пустое пространство, которое выпускает ColdFusion?White Space/Coldfusion

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

+0

В чем проблема? Попробуйте решить эту проблему. Дополнительное белое пространство не причиняет реального вреда самому себе, по крайней мере, не того, о чем я знаю. – Jay

ответ

4

С точкой зрения тегов, есть cfsilent

В администраторе есть параметр «Включить пробельное управление»

Futher reading on cfsilent and cfcontent reset.

+2

Точно так же есть и тег – kevink

+1

и Travis

+1

@Travis - должно быть '' т.е. подавить с –

1

Если ни <cfsilent>, ни <cfsetting enablecfoutputonly="yes"> может удовлетворить вас, то вы вероятно, слишком сложно разработать эту проблему.

Когда вы просите исключительно об эстетических соображениях, моя рекомендация: игнорировать пробелы, это не наносит никакого вреда.

+3

Пробел - это скорее проблема, чем чистый код. Пробелы перед типом doctype вызовут ошибки при проверке. По-видимому эстетический, но это на самом деле проблема, если ваши клиенты хотят/требуют действительных сайтов. Пробелы до или после возврата в виде обычного текстового веб-сервиса могут также вызвать неудобства. Ведущие пробелы в возврате XML могут вызывать такие ошибки, как «недопустимый контент в прологе». Оба этих результата потребуют от пользователя манипулирования результатами только для использования. По-моему, это неряшливый веб-сервис. – Travis

+0

@Travis: Да, это правда. Тем не менее, эти конкретные проблемы могут быть решены с помощью доступных методов. Пробелы, которые являются результатом смешения CF и HTML, являются гораздо более проблематичными и могут быть оставлены в покое, ИМХО. – Tomalak

+0

В большинстве случаев да, я согласен, что его можно игнорировать. Howerver, у меня было несколько клиентов, которые настаивают на строгой проверке (на забавном примечании, даже его новейшие сайты выглядят как-то с 1991 года). Пробелы наводняют хаос при попытке сделать это; не только до doctype, но и по всему документу. Большая часть из этого не происходит из-за CF, но из-за наличия пробела в коде кодером, см. Мой вклад в ответы. – Travis

0

Я обнаружил, что даже используя все возможные способы устранения пробелов, ваш код может по-прежнему иметь некоторые нежелательные пробелы или разрывы строк. Если вы все еще испытываете это, вам может потребоваться пожертвовать хорошо сформированный код для желаемого результата.

, например, вместо:

<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.

НТН

+0

ой мой. Красиво оформленный код, который читается и легко понимается, должен быть более важным, чем дополнительное лишнее пространство в HTML-коде. Давай же. – Jay

+1

См. Комментарии в ответе Томалака. В большинстве случаев да, но не тогда, когда это абсолютно необходимо, Джей. Это жизнеспособное решение, когда пробелы будут обрабатывать вашу систему, а CF не обрабатывает пробелы, в которые вы входите. Пробелы перед doctype вызовут ошибки при проверке. По-видимому эстетический, но это на самом деле проблема, если ваши клиенты хотят/требуют действительных сайтов. Пробелы до или после возврата в виде обычного текстового веб-сервиса могут также вызвать неудобства. Ведущие пробелы в возврате XML могут вызывать такие ошибки, как «недопустимый контент в прологе». – Travis

5

Вы можете изменить вывод ColdFusion, получая доступ к ColdFusion Outpout буфера. James Brown недавно продемонстрировали это на нашем собрании пользователей (Central Florida Web Developers User Group).

<cfscript> 
    out = getPageContext().getOut().getString(); 
    newOutput = REreplace(out, 'regex', '', 'all'); 
</cfscript> 

Отличное место для этого было бы в Application.cfc onRequestEnd(). Результатом может быть одна строка HTML, которая затем отправляется в браузер. Работайте со своим веб-сервером до GZip, и вы значительно сократите пропускную способность.

0

В качестве альтернативы вы можете обеспечить, чтобы вся ваша страница хранилась в переменной, и вся эта обработка выполняется в тегах cfsilent. например

<cfsilent> 
    <!-- some coldfusion --> 
    <cfsavecontent variable="pageContent"> 
     <html> 
      <!-- some content --> 
     </html> 
    </cfsavecontent> 
    <!-- reformat pageContent if required --> 
</cfsilent><cfoutput>#pageContent#</cfoutput> 

Наконец, вы можете выполнить любую дополнительную обработку после того, как вы сформировали PageContent, но перед тем, как вывести его, например, регулярное выражение для удаления дополнительных пробелов или некоторого кодирования кода.

0

Вот совет, если вы используете CFC.

Если вы не ожидали ваш метод для создания какого-либо вывода, используйте output="false" в <cffunction> и <cfcomponent> (не требуется, только если вы используете CF9 стиль сценария). Это устранит много нежелательных пробелов.

11

В дополнение к <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> 

Таким образом, вы не получите «Содержимое не допускается в прологе» -ошибка для XML-документы ,

Если вы получаете нежелательные пробельные из функции с помощью output атрибута по подавить любой вывод и вернуть результат в виде строки - например:

<cffunction name="getMyName" access="public" returntype="string" output="no"> 
    <cfreturn "Seybsen" /> 
</cffunction> 
0

Если у вас есть доступ к серверу и хотите реализовать он на каждой странице запрашивает поиск и устанавливает trimflt.jar. Это фильтр сервлетов Java, который удалит все пробелы и разрывы строк перед его отправкой. Снимите банку в каталоге/WEB-INF/lib из CF и отредактируйте файл web.xml, чтобы добавить фильтр. Его конфигурация также позволяет удалять комментарии, исключать файлы или расширения и сохранять определенные строки. Бежал в течение нескольких лет без проблем. Установите его и забудьте его решение.