2013-03-12 6 views
8

Ich bin mit PHP ordentlich zu reinigen ein Benutzer HTML-Seite erzeugt, die einen Stil-Tag enthält:Prevent PHP Tidy aus der Umwandlung Stil-Tag-Daten zu CDATA

<style type="text/css"> 
    body { 
     padding-top: 60px; 
     padding-bottom: 40px; 
    } 
</style> 

Aber sobald ich die Tidy laufen, der Stil Tag-Daten in CData konvertiert. Mein Hauptzweck der Verwendung von Tidy ist es, die Datei zu reparieren sowie den richtigen Einzug durchzuführen.

<style type="text/css"> 
/*<![CDATA[*/ 
    body { 
      padding-top: 60px; 
      padding-bottom: 40px; 
    } 
/*]]>*/ 
</style> 

My Tidy Konfigurationsoptionen sind -

$options = array(
    'preserve-entities' => true, 
    'hide-comments' => true, 
    'tidy-mark' => false, 
    'indent' => true, 
    'indent-spaces' => 4, 
    'new-blocklevel-tags' => 'article,header,footer,section,nav', 
    'new-inline-tags' => 'video,audio,canvas,ruby,rt,rp', 
    'doctype' => 'omit', 
    'sort-attributes' => 'alpha', 
    'vertical-space' => false, 
    'output-xhtml' => true, 
    'wrap' => 180, 
    'wrap-attributes' => false, 
    'break-before-br' => false, 
    'vertical-space' => false, 
); 

$buffer = tidy_parse_string($buffer, $options, 'utf8'); 
tidy_clean_repair($buffer); 

Ich versuchte viel, aber die PHP Tidy-Bibliothek ist die Suche nicht gerade ein "gut dokumentiert" ein! Es ging also darum, die CDATA manuell zu entfernen, nachdem Tidy den Code bereinigt/repariert hat.

$buffer = str_replace("/*<![CDATA[*/","",$buffer); 
$buffer = str_replace("/*]]>*/","",$buffer); 

Nun ist das mein Problem mit diesem Ansatz ist, dass die Vertiefung der Style-Tages Daten noch geschraubt (nicht exakt mit dem Rest der Seite ausgerichtet)

<style type="text/css"> 
    body { 
     padding-top: 60px; 
     padding-bottom: 40px; 
    } 
</style> 

Also noch einmal, wie zu tun Ich verhindere, dass TIDY CDATA auf der Seite erstellt!

Vielen Dank!

Antwort

7

Schalten Sie die Option output-xhtml aus. Der CDATA-Wrapping wird für XHTML benötigt, da CSS unescaped > Zeichen enthalten kann.

+0

ahhhh Ich kann nicht glauben, dass ich das getan habe ... verbringe Stunden damit !! Vielen Dank :) –

+0

Ab heute sollte OP * beide * deaktivieren ['output-xhtml'] (http://tidy.sourceforge.net/docs/quickref.html#output-xhtml) ** und ** aktivieren ['output-html'] (http://tidy.sourceforge.net/docs/quickref.html#output-html), dh habe '' output-xhtml '=> false' und'' output-html '= > true' (getestet mit 'HTML Tidy für Linux Version 5.4.0 '). –

0

Eine Möglichkeit, dies zu umgehen, ist die Verwendung eines Links zu einem externen Stylesheet.

<link rel="stylesheet" type="text/css" media="screen, print" href="site.css"> 
+0

Wie ich bereits erwähnt habe, ist die Seite eine vom Benutzer generierte Sache, also suchte ich nach einer Lösung, die die cdata-Tag-Erstellung verhindern konnte. Das Verschieben auf ein externes Stylesheet ist natürlich eine Option, aber ich hoffte, dass es der letzte Ausweg ist. .. –

1

Die Zugabe von CDATA-Tags sollte Browser helfen wissen, dass sie Zeichen wie ‚<‘ und ‚&‘ als wörtliche Zeichen anstelle von HTML-Syntax analysieren sollten. Tidy scheint keine dokumentierte Konfiguration zu besitzen, die das Generieren für inline CSS/Javascript verhindern würde. Die einzige Option wäre das Verschieben der CSS in eine separate Datei. In diesem Fall wird das CDATA-Tag nicht benötigt.

siehe http://tidy.sourceforge.net/docs/quickref.html und https://en.wikipedia.org/wiki/CDATA für weitere Informationen.

+0

yeah Ich bin mir bewusst, wofür CDATA verwendet wird, meine einzige Sorge ist, dass es nicht sehr nützlich in einem Style-Tag, der Browser ist intelligent genug, um das zu entschlüsseln und es entsprechend zu verwenden ... so gibt es einen Weg zu vermeide dieses "unnötige" Addon! –