Was wäre der richtige Weg, um den von ColdFusion ausgegebenen Leerraum zu stoppen?White Space/Coldfusion
Ich weiß, es gibt cfcontent
und cfsetting enableCFoutputOnly
. Was ist der richtige Weg?
Was wäre der richtige Weg, um den von ColdFusion ausgegebenen Leerraum zu stoppen?White Space/Coldfusion
Ich weiß, es gibt cfcontent
und cfsetting enableCFoutputOnly
. Was ist der richtige Weg?
In Bezug auf die Tags gibt es cfsilent
Im Administrator eine Einstellung ist 'Enable Leerzeichen Management'
Wenn weder <cfsilent>
noch <cfsetting enablecfoutputonly="yes">
Sie zufriedenstellen können, dann sind Sie wahrscheinlich dieses Problem übertrieben.
Wenn Sie nur aus ästhetischen Gründen fragen, ist meine Empfehlung: Ignorieren Sie die Leerzeichen, es tut nichts zu schaden.
Whitespace ist eher ein Problem, als sauberen Code zu verpfuschen. Whitespace vor einem Doctype verursacht Fehler bei der Validierung. Scheinbar ästhetisch, aber es ist tatsächlich ein Problem, wenn Ihre Kunden gültige Websites benötigen/benötigen. Whitespace vor oder nach einer reinen Text-Web-Service-Rückgabe kann ebenfalls zu Unannehmlichkeiten führen. Führende Leerzeichen in einer XML-Rückgabe können zu Fehlern führen, z. B. "Inhalt ist in Prolog nicht zulässig." Beide dieser Ergebnisse würden erfordern, dass der Benutzer die Ergebnisse manipuliert, nur um verwendbar zu sein. Meiner Meinung nach ist das ein schlampiger Webservice. – Travis
@Travis: Ja, das stimmt. Dennoch können diese speziellen Probleme mit den verfügbaren Methoden perfekt gelöst werden. Der Leerraum, der sich aus der Vermischung von CF und HTML ergibt, ist weitaus weniger ein Problem und kann alleine gelassen werden, IMHO. – Tomalak
In den meisten Fällen stimme ich zu, dass es ignoriert werden kann. Allerdings habe ich ein paar Kunden, die auf strikter Validierung bestehen (auf eine lustige Randbemerkung, sogar seine neuesten Seiten sehen aus wie 1991). Whitespace verheerend, wenn man versucht, dies zu tun; nicht nur vor dem Doctype, sondern überall im Dokument. Das meiste davon ist nicht wegen CF, sondern weil der Codierer Leerzeichen im Code hat, siehe meinen Beitrag zu den Antworten. – Travis
Ich habe festgestellt, dass selbst bei Verwendung aller möglichen Methoden zur Eliminierung von Leerzeichen der Code immer noch unerwünschte Leerzeichen oder Zeilenumbrüche enthält. Wenn Sie dies immer noch erleben, müssen Sie möglicherweise gut formatierten Code für die gewünschte Ausgabe opfern.
zum Beispiel statt:
<cfprocessingdirective supressWhiteSpace = "true">
<cfquery ...>
...
...
...
</cfquery>
<cfoutput>
Welcome to the site #query.userName#
</cfoutput>
</cfprocessingdirective>
Sie auf Code benötigen:
<cfprocessingdirective supressWhiteSpace = "true"><cfquery ...>
...
...
...
</cfquery><cfoutput>Welcome to the site #query.UserName#</cfoutput></cfprocessingdirective>
Dies ist CF nicht Leerzeichen hinzufügen, aber Sie Leerzeichen hinzuzufügen, wenn Ihre CF. Formatierung
HTH
oh mein. Schön formatierter Code, der lesbar und leicht verständlich ist, muss wichtiger sein als einige zusätzliche Leerzeichen im HTML-Code. Komm jetzt. – Jay
Siehe die Kommentare in Tomalaks Antwort. In den meisten Fällen ja, aber nicht, wenn es absolut erforderlich ist, Jay. Dies ist eine praktikable Lösung, wenn Leerräume Ihr System verpfuschen und CF nicht mit dem von Ihnen eingegebenen Leerzeichen fertig wird. Whitespace vor einem Doctype verursacht Fehler bei der Validierung. Scheinbar ästhetisch, aber es ist tatsächlich ein Problem, wenn Ihre Kunden gültige Websites benötigen/benötigen. Whitespace vor oder nach einer reinen Text-Web-Service-Rückgabe kann ebenfalls zu Unannehmlichkeiten führen. Führende Leerzeichen in einer XML-Rückgabe können zu Fehlern führen, z. B. "Inhalt ist in Prolog nicht zulässig." – Travis
Sie können, indem sie den Zugriff auf Coldfusion outpout Buffer der Coldfusion-Ausgabe ändern. James Brown hat dies kürzlich in unserem Benutzergruppenmeeting (Central Florida Web Developers User Group) demonstriert.
<cfscript>
out = getPageContext().getOut().getString();
newOutput = REreplace(out, 'regex', '', 'all');
</cfscript>
Ein großartiger Ort, um dies zu tun wäre in Application.cfc onRequestEnd(). Ihr Ergebnis könnte eine einzelne HTML-Zeile sein, die dann an den Browser gesendet wird. Arbeiten Sie mit Ihrem Webserver an GZip und Sie werden die Bandbreite sehr reduzieren.
Alternativ können Sie sicherstellen, dass Ihre gesamte Seite in einer Variablen gespeichert ist und die gesamte Verarbeitung in cfsilent-Tags erfolgt. z.B.
Schließlich können Sie jede zusätzliche Verarbeitung durchführen, nachdem Sie den Seiteninhalt generiert haben, aber bevor Sie z. ein regulärer Ausdruck, um zusätzliche Leerzeichen oder Code-Aufräumarbeiten zu entfernen.
Hier ist ein Tipp, wenn Sie CFC verwenden.
Wenn Sie nicht erwarten, dass Ihre Methode eine Ausgabe generiert, verwenden Sie output="false"
in <cffunction>
und <cfcomponent>
(nicht nur erforderlich, wenn Sie CF9-Skript-Stil verwenden). Dies wird eine Menge unerwünschter Leerzeichen beseitigen.
Zusätzlich zu <cfsilent>
, <cfsetting enablecfoutputonly="yes">
und <cfprocessingdirective suppressWhiteSpace = "true">
ist <cfcontent reset="true" />
. Sie können damit Leerzeichen am Anfang Ihres Dokuments löschen.
HTML5 Dokument würde dann wie folgt beginnen:
<cfcontent type="text/html; charset=utf-8" reset="true" /><!doctype html>
XML-Dokument:
<cfcontent reset="yes" type="text/xml; charset=utf-8" /><CFOUTPUT>#VariableHoldingXmlDocAsString#</CFOUTPUT>
diese Weise werden Sie das nicht bekommen "Inhalt ist nicht in Prolog erlaubt" -Fehler für XML-Dokumente .
Wenn Sie unerwünschte Leerzeichen aus einer Funktion verwenden, um die output
-Attribut bekommen eine Ausgabe zu unterdrücken und Ihr Ergebnis als String zurück - zum Beispiel:
<cffunction name="getMyName" access="public" returntype="string" output="no">
<cfreturn "Seybsen" />
</cffunction>
Wenn Sie den Zugriff auf den Server haben und umsetzen wollen Suchen Sie auf jeder Seitenanforderung nach trimflt.jar und installieren Sie es. Es ist ein Java-Servlet-Filter, der alle Leerzeichen und Zeilenumbrüche vor dem Senden entfernt. Löschen Sie das JAR im Verzeichnis/WEB-INF/lib von CF und bearbeiten Sie die Datei web.xml, um den Filter hinzuzufügen. Es ist auch konfigurierbar, um Kommentare zu entfernen, Dateien oder Erweiterungen auszuschließen und spezifische Zeichenfolgen beizubehalten. Ich habe es ein paar Jahre ohne Probleme laufen lassen. A setzen Sie es und vergessen Sie es Lösung.
Was ist das Problem, das Sie versuchen zu lösen? Der zusätzliche weiße Raum verursacht an sich keinen wirklichen Schaden, zumindest nicht, dass ich weiß. – Jay