2010-02-11 14 views
16

Quale sarebbe il modo corretto per interrompere lo spazio bianco che ColdFusion emette?White Space/Coldfusion

So che c'è cfcontent e cfsetting enableCFoutputOnly. Qual è il modo corretto per farlo?

+0

Qual è il problema che stai cercando di risolvere? Lo spazio bianco aggiuntivo non provoca alcun danno reale in sé e per sé, almeno non che io sappia. – Jay

risposta

1

Se né <cfsilent><cfsetting enablecfoutputonly="yes"> in grado di soddisfare voi, allora siete probabilmente sovra-ingegnerizzare questo problema.

Quando si chiede solo per motivi estetici, la mia raccomandazione è: Ignora lo spazio bianco, non fa alcun danno.

+3

Lo spazio bianco è più un problema di un codice pulito. Gli spazi bianchi prima di un doctype causano errori nella convalida. Apparentemente estetico, ma in realtà è un problema se i tuoi clienti vogliono/richiedono siti validi. Anche lo spazio bianco prima o dopo un reso del servizio Web in chiaro può causare inconvenienti. Gli spazi bianchi principali in un ritorno XML possono causare errori come "contenuto non consentito nel prologo". Entrambi questi risultati richiederebbero all'utente di manipolare i risultati solo per essere utilizzabili. Secondo me è un servizio web scadente. – Travis

+0

@Travis: Sì, è vero. Tuttavia, questi problemi particolari possono essere risolti perfettamente con i metodi disponibili. Lo spazio bianco che risulta dalla mescolanza di CF e HTML è molto meno problematico e può essere lasciato in pace, IMHO. – Tomalak

+0

Nella maggior parte dei casi sì, sono d'accordo che può essere ignorato. Comunque, ho avuto alcuni clienti che insistono su una rigida validazione (su una nota divertente, anche i suoi siti più recenti sembrano qualcosa del 1991). Gli spazi bianchi seminano il caos quando si cerca di farlo; non solo prima del doctype ma su tutto il documento. La maggior parte non è a causa della CF, ma perché ci sono degli spazi nel codice da parte del programmatore, vedi il mio contributo alle risposte. – Travis

0

Ho scoperto che anche utilizzando tutti i modi possibili per eliminare gli spazi bianchi, il codice potrebbe contenere ancora spazi indesiderati o interruzioni di riga. Se lo stai ancora sperimentando, potresti dover sacrificare il codice ben formato per l'output desiderato.

per esempio, invece di:

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

Potrebbe essere necessario il codice:

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

Questo non CF aggiungendo spazi bianchi, ma l'aggiunta di spazi vuoti durante la formattazione del CF.

HTH

+0

oh mio. Il codice ben formattato che è leggibile e facilmente comprensibile deve essere più importante di uno spazio bianco extra nel codice in output HTML. Andiamo ora. – Jay

+1

Vedere i commenti nella risposta di Tomalak. Nella maggior parte dei casi si, ma non quando è assolutamente necessario, Jay. Questa è una soluzione praticabile quando gli spazi bianchi ingombrano il tuo sistema e CF non gestisce gli spazi bianchi che inserisci. Gli spazi bianchi prima di un doctype causano errori nella convalida. Apparentemente estetico, ma in realtà è un problema se i tuoi clienti vogliono/richiedono siti validi. Anche lo spazio bianco prima o dopo un reso del servizio Web in chiaro può causare inconvenienti. Gli spazi bianchi principali in un ritorno XML possono causare errori come "contenuto non consentito nel prologo". – Travis

5

È possibile modificare l'output ColdFusion per ottenere l'accesso al ColdFusion outpout Buffer. James Brown lo ha recentemente demo alla riunione del gruppo di utenti (Central Florida Web Developers User Group).

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

Un ottimo posto per farlo sarebbe in Application.cfc onRequestEnd(). Il risultato potrebbe essere una singola riga di HTML che viene quindi inviata al browser. Lavora con il tuo server web su GZip e ridurrai la larghezza di banda molto.

0

In alternativa, è possibile garantire che l'intera pagina venga archiviata all'interno di una variabile e che tutta questa elaborazione venga eseguita all'interno di tag cfsilent. per esempio.

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

Infine, è possibile eseguire alcuna elaborazione aggiuntiva dopo aver generato la pagecontent ma prima di output per esempio un'espressione regolare per rimuovere spazi bianchi aggiuntivi o un po 'di riordino del codice.

0

Ecco un consiglio se si utilizza CFC.

Se non si prevede che il metodo generi output, utilizzare output="false" in <cffunction> e <cfcomponent> (non necessario solo se si utilizza lo stile di script CF9). Questo eliminerà un sacco di spazi vuoti indesiderati.

11

Oltre a <cfsilent>, <cfsetting enablecfoutputonly="yes"> e <cfprocessingdirective suppressWhiteSpace = "true"> è <cfcontent reset="true" />. Puoi eliminare spazi bianchi all'inizio del documento con esso.

documento HTML5 sarebbe quindi avviare in questo modo: documento

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

XML:

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

In questo modo non sarà possibile ottenere il "Contenuto non è consentito in prologo" -Errore per documenti XML .

Se hai trovato spazi bianchi indesiderati da una funzione utilizzare il output -attribute per sopprimere qualsiasi uscita e restituire il risultato come stringa - per esempio:

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

Se si ha accesso al server e desidera implementare su ogni richiesta di pagina cerca e installa trimflt.jar. È un filtro servlet Java che rimuoverà tutti gli spazi bianchi e le interruzioni di riga prima di inviarlo. Rilasciare il jar nella directory/WEB-INF/lib di CF e modificare il file web.xml per aggiungere il filtro. È anche configurabile per rimuovere commenti, escludere file o estensioni e conservare stringhe specifiche. Lo ho gestito per alcuni anni senza problemi. A metterlo e dimenticarlo soluzione.

Problemi correlati