Что было бы правильным способом остановить пустое пространство, которое выпускает ColdFusion?White Space/Coldfusion
Я знаю, что есть cfcontent
и cfsetting enableCFoutputOnly
. Каков правильный способ сделать это?
Что было бы правильным способом остановить пустое пространство, которое выпускает ColdFusion?White Space/Coldfusion
Я знаю, что есть cfcontent
и cfsetting enableCFoutputOnly
. Каков правильный способ сделать это?
С точкой зрения тегов, есть cfsilent
В администраторе есть параметр «Включить пробельное управление»
Если ни <cfsilent>
, ни <cfsetting enablecfoutputonly="yes">
может удовлетворить вас, то вы вероятно, слишком сложно разработать эту проблему.
Когда вы просите исключительно об эстетических соображениях, моя рекомендация: игнорировать пробелы, это не наносит никакого вреда.
Пробел - это скорее проблема, чем чистый код. Пробелы перед типом doctype вызовут ошибки при проверке. По-видимому эстетический, но это на самом деле проблема, если ваши клиенты хотят/требуют действительных сайтов. Пробелы до или после возврата в виде обычного текстового веб-сервиса могут также вызвать неудобства. Ведущие пробелы в возврате XML могут вызывать такие ошибки, как «недопустимый контент в прологе». Оба этих результата потребуют от пользователя манипулирования результатами только для использования. По-моему, это неряшливый веб-сервис. – Travis
@Travis: Да, это правда. Тем не менее, эти конкретные проблемы могут быть решены с помощью доступных методов. Пробелы, которые являются результатом смешения CF и HTML, являются гораздо более проблематичными и могут быть оставлены в покое, ИМХО. – Tomalak
В большинстве случаев да, я согласен, что его можно игнорировать. Howerver, у меня было несколько клиентов, которые настаивают на строгой проверке (на забавном примечании, даже его новейшие сайты выглядят как-то с 1991 года). Пробелы наводняют хаос при попытке сделать это; не только до doctype, но и по всему документу. Большая часть из этого не происходит из-за CF, но из-за наличия пробела в коде кодером, см. Мой вклад в ответы. – Travis
Я обнаружил, что даже используя все возможные способы устранения пробелов, ваш код может по-прежнему иметь некоторые нежелательные пробелы или разрывы строк. Если вы все еще испытываете это, вам может потребоваться пожертвовать хорошо сформированный код для желаемого результата.
, например, вместо:
<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.
НТН
ой мой. Красиво оформленный код, который читается и легко понимается, должен быть более важным, чем дополнительное лишнее пространство в HTML-коде. Давай же. – Jay
См. Комментарии в ответе Томалака. В большинстве случаев да, но не тогда, когда это абсолютно необходимо, Джей. Это жизнеспособное решение, когда пробелы будут обрабатывать вашу систему, а CF не обрабатывает пробелы, в которые вы входите. Пробелы перед doctype вызовут ошибки при проверке. По-видимому эстетический, но это на самом деле проблема, если ваши клиенты хотят/требуют действительных сайтов. Пробелы до или после возврата в виде обычного текстового веб-сервиса могут также вызвать неудобства. Ведущие пробелы в возврате XML могут вызывать такие ошибки, как «недопустимый контент в прологе». – Travis
Вы можете изменить вывод 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, и вы значительно сократите пропускную способность.
В качестве альтернативы вы можете обеспечить, чтобы вся ваша страница хранилась в переменной, и вся эта обработка выполняется в тегах 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 стиль сценария). Это устранит много нежелательных пробелов.
В дополнение к <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>
Если у вас есть доступ к серверу и хотите реализовать он на каждой странице запрашивает поиск и устанавливает trimflt.jar. Это фильтр сервлетов Java, который удалит все пробелы и разрывы строк перед его отправкой. Снимите банку в каталоге/WEB-INF/lib из CF и отредактируйте файл web.xml, чтобы добавить фильтр. Его конфигурация также позволяет удалять комментарии, исключать файлы или расширения и сохранять определенные строки. Бежал в течение нескольких лет без проблем. Установите его и забудьте его решение.
В чем проблема? Попробуйте решить эту проблему. Дополнительное белое пространство не причиняет реального вреда самому себе, по крайней мере, не того, о чем я знаю. – Jay