2010-02-11 31 views
16

Điều gì sẽ là cách chính xác để ngăn chặn không gian trắng mà ColdFusion kết quả đầu ra?Không gian trắng/Coldfusion

Tôi biết có cfcontentcfsetting enableCFoutputOnly. Cách chính xác để làm điều đó là gì?

+0

Sự cố bạn đang cố gắng giải quyết là gì? Không gian trắng bổ sung không gây hại cho bản thân và ít nhất là không phải tôi biết. – Jay

Trả lời

1

Nếu không <cfsilent> cũng không <cfsetting enablecfoutputonly="yes"> có thể làm bạn hài lòng, sau đó bạn có có lẽ quá kỹ thuật vấn đề này.

Khi bạn chỉ yêu cầu vì lý do thẩm mỹ, đề xuất của tôi là: Bỏ qua khoảng trống, nó không gây hại gì.

+3

Khoảng trắng có nhiều vấn đề hơn là làm sạch mã botching. Khoảng trắng trước một loại tài liệu sẽ gây ra lỗi khi xác thực. Dường như thẩm mỹ, nhưng nó thực sự là một vấn đề nếu khách hàng của bạn muốn/yêu cầu các trang web hợp lệ. Khoảng trắng trước hoặc sau một bản trả lại dịch vụ web văn bản thuần túy cũng có thể gây ra những bất tiện. Khoảng trống hàng đầu trong một trả về XML có thể gây ra các lỗi như "nội dung không được phép trong prolog". Cả hai kết quả này sẽ yêu cầu người dùng thao tác các kết quả chỉ để có thể sử dụng được. Theo tôi, đó là một dịch vụ web cẩu thả. – Travis

+0

@Travis: Vâng, đó là sự thật. Tuy nhiên, những vấn đề cụ thể này có thể được giải quyết hoàn hảo với các phương pháp có sẵn. Khoảng trống mà kết quả của việc trộn lẫn CF và HTML là ít hơn một vấn đề và có thể được để lại một mình, IMHO. – Tomalak

+0

Trong hầu hết các trường hợp, tôi đồng ý rằng nó có thể bị bỏ qua. Howerver, tôi đã có một vài khách hàng nhấn mạnh vào việc xác nhận nghiêm ngặt (trên một lưu ý buồn cười, ngay cả những trang web mới nhất của anh ấy trông giống như một cái gì đó từ năm 1991). Khoảng trắng tàn phá khi cố gắng làm điều này; không chỉ trước DOCTYPE nhưng trên tất cả các tài liệu. Hầu hết không phải vì CF, nhưng vì có khoảng trắng trong mã bởi người lập trình, hãy xem đóng góp của tôi cho câu trả lời. – Travis

0

Tôi đã thấy rằng thậm chí sử dụng mọi cách có thể để loại bỏ khoảng trắng, mã của bạn vẫn có thể có một số khoảng trống không mong muốn hoặc ngắt dòng. Nếu bạn vẫn đang gặp phải điều này, bạn có thể cần phải hy sinh mã được định dạng tốt cho đầu ra mong muốn.

ví dụ, thay vì:

<cfprocessingdirective supressWhiteSpace = "true"> 
<cfquery ...> 
... 
... 
... 
</cfquery> 
<cfoutput> 
Welcome to the site #query.userName# 
</cfoutput> 
</cfprocessingdirective> 

Bạn có thể cần phải mã:

<cfprocessingdirective supressWhiteSpace = "true"><cfquery ...> 
... 
... 
... 
</cfquery><cfoutput>Welcome to the site #query.UserName#</cfoutput></cfprocessingdirective> 

Đây không phải là CF thêm khoảng trắng, nhưng bạn thêm khoảng trắng khi định dạng CF của bạn

HTH

+0

oh my. Mã được định dạng độc đáo dễ đọc và dễ hiểu phải quan trọng hơn một số khoảng trắng thừa trong mã được xuất HTML. Thôi nào. – Jay

+1

Xem các bình luận trong câu trả lời của Tomalak. Trong hầu hết các trường hợp có nhưng không phải khi nó là hoàn toàn cần thiết, Jay. Đây là một giải pháp khả thi khi khoảng trắng sẽ bẻ khóa hệ thống của bạn và CF không xử lý khoảng trắng bạn nhập vào. Khoảng trắng trước một loại tài liệu sẽ gây ra lỗi khi xác thực. Dường như thẩm mỹ, nhưng nó thực sự là một vấn đề nếu khách hàng của bạn muốn/yêu cầu các trang web hợp lệ. Khoảng trắng trước hoặc sau một bản trả lại dịch vụ web văn bản thuần túy cũng có thể gây ra những bất tiện. Khoảng trống hàng đầu trong một trả về XML có thể gây ra các lỗi như "nội dung không được phép trong prolog". – Travis

5

Bạn có thể sửa đổi đầu ra ColdFusion bằng cách truy cập vào bộ đệm Coldfusion Outpout. James Brown gần đây đã demo'd điều này tại cuộc họp nhóm người dùng của chúng tôi (Central Florida Web Developers User Group).

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

Một nơi tuyệt vời để làm điều này sẽ có trong Application.cfc onRequestEnd(). Kết quả của bạn có thể là một dòng HTML, sau đó được gửi đến trình duyệt. Làm việc với máy chủ web của bạn để GZip và bạn sẽ cắt băng thông rất nhiều.

0

Hoặc, bạn có thể đảm bảo toàn bộ trang của bạn được lưu trữ trong một biến và tất cả quá trình xử lý này được thực hiện trong các thẻ cfsilent. ví dụ.

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

Cuối cùng, bạn có thể thực hiện bất kỳ quá trình xử lý bổ sung nào sau khi bạn đã tạo pagecontent nhưng trước khi xuất, ví dụ: một biểu thức chính quy để loại bỏ khoảng trống bổ sung hoặc một số mã làm sạch.

0

Đây là mẹo nếu bạn sử dụng CFC.

Nếu bạn không mong đợi phương pháp tạo bất kỳ đầu ra nào, hãy sử dụng output="false" trong <cffunction><cfcomponent> (không cần thiết chỉ khi bạn đang sử dụng kiểu tập lệnh CF9). Điều này sẽ loại bỏ rất nhiều khoảng trắng không mong muốn.

11

Ngoài <cfsilent>, <cfsetting enablecfoutputonly="yes"><cfprocessingdirective suppressWhiteSpace = "true"><cfcontent reset="true" />. Bạn có thể xóa khoảng trắng ở đầu tài liệu của bạn với nó.

tài liệu HTML5 sau đó sẽ bắt đầu như thế này: Tài liệu

<cfcontent type="text/html; charset=utf-8" reset="true" /><!doctype html> 

XML:

<cfcontent reset="yes" type="text/xml; charset=utf-8" /><CFOUTPUT>#VariableHoldingXmlDocAsString#</CFOUTPUT> 

Bằng cách này bạn sẽ không nhận được "Nội dung không được phép trong prolog"-lỗi cho tài liệu XML .

Nếu bạn đang nhận được khoảng trắng không mong muốn từ một hàm sử dụng output -attribute để ngăn chặn bất kỳ đầu ra và trả về kết quả của bạn như chuỗi - ví dụ:

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

Nếu bạn có quyền truy cập vào máy chủ và muốn thực hiện nó trên mọi yêu cầu trang tìm kiếm và cài đặt trimflt.jar. Đó là một bộ lọc Java servlet sẽ loại bỏ tất cả khoảng trống và ngắt dòng trước khi gửi đi. Thả jar trong thư mục/WEB-INF/lib của CF và chỉnh sửa tệp web.xml để thêm bộ lọc. Cấu hình của nó cũng như để loại bỏ ý kiến, loại trừ các tập tin hoặc phần mở rộng, và bảo tồn các chuỗi cụ thể. Đã chạy nó trong một vài năm mà không có một vấn đề. Một bộ nó và quên nó giải pháp.

Các vấn đề liên quan