2013-03-12 12 views
8

Sto usando php ordinata per pulire un user generated pagina HTML che contiene un tag di stile:Impedire PHP Tidy di convertire i dati dei tag di stile per CDATA

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

Ma una volta che ho eseguito il Tidy, i dati tag di stile è convertito in CData. Il mio scopo principale di usare Tidy è riparare il file e fare il rientro corretto.

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

mie opzioni di configurazione sono ordinate -

$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); 

Ho provato a cercare un sacco ma la biblioteca Tidy PHP non è esattamente uno "ben documentato"! Quindi è venuto giù per rimuovere il CDATA manualmente dopo che Tidy pulisce/ripara il codice.

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

Ora il mio problema con questo approccio è che il rientro dei dati tag di stile è ancora avvitato (non esattamente allineata con il resto della pagina)

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

Così ancora una volta, come si fa Impedisco a TIDY di creare CDATA sulla pagina!

Grazie mille!

risposta

7

Disattivare l'opzione output-xhtml. Il wrapping CDATA è richiesto per XHTML, in quanto i CSS possono contenere caratteri senza caratteri di escape >.

+0

ahhhh non posso credere di averlo fatto ... passare ore su questo !! Grazie mille :) –

+0

Ad oggi OP dovrebbe * entrambi * desattivare ['output-xhtml'] (http://tidy.sourceforge.net/docs/quickref.html#output-xhtml) ** e ** attivare ['output-html'] (http://tidy.sourceforge.net/docs/quickref.html#output-html), cioè,' 'output-xhtml '=> false' e'' output-html '= > true' (testato con 'HTML Tidy per Linux versione 5.4.0 '). –

0

Un modo per gestirlo è utilizzare un collegamento a un foglio di stile esterno.

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

come ho detto, la pagina è una cosa generata dall'utente, quindi stavo cercando una soluzione che potesse solo impedire la creazione del tag cdata .. passare a un foglio di stile esterno è ovviamente un'opzione ma speravo che fosse l'ultima risorsa. .. –

1

L'aggiunta di tag CDATA ha lo scopo di aiutare il browser sanno che devono analizzare i caratteri come '<' e '&' come caratteri letterali invece di sintassi HTML. Tidy non sembra avere alcuna configurazione documentata che impedisca di generarli per css/javascript in linea. L'unica opzione sarebbe spostare il css in un file separato. Nel qual caso non ha bisogno del tag CDATA.

vedere http://tidy.sourceforge.net/docs/quickref.html e https://en.wikipedia.org/wiki/CDATA per ulteriori informazioni.

+0

sì, sono a conoscenza di quale CDATA è usato, la mia unica preoccupazione è che non è molto utile all'interno di un tag di stile, il browser è abbastanza intelligente da decodificarlo e usarlo in modo appropriato ... quindi c'è un modo per evitare questo addon "non necessario"! –

Problemi correlati