2012-05-04 12 views
5

Ho un mucchio di dati HTML che sto scrivendo in un file PDF usando PHP. Nel PDF, voglio che tutto il codice HTML venga rimosso e ripulito. Così, per esempio:Pulire HTML con PHP per creare una stringa pulita

<ul> 
    <li>First list item</li> 
    <li>Second list item which is quite a bit longer</li> 
    <li>List item with apostrophe 's 's</li> 
</ul> 

dovrebbe diventare:

First list item 
Second list item which is quite a bit longer 
List item with apostrophe 's 's 

Tuttavia, se semplicemente uso strip_tags(), ho qualcosa di simile:

First list item&#8232; 

    Second list item which is quite a bit 
longer&#8232; 

    List item with apostrophe &rsquo;s &rsquo;s 

Si noti inoltre il rientro della produzione.

Qualche suggerimento su come pulire correttamente l'HTML con stringhe piacevoli e pulite senza spazi vuoti e caratteri strani?

Grazie :)

+2

Dubito che 'strip_tags()' solo codifichi le tue entità. Sei sicuro di non perdere una chiamata a 'htmlentities' da qualche parte? – Yoshi

+1

Il rientro è esattamente quello che mi aspetterei, PHP sta tagliando i tag, ma non il testo extra che li circonda. – scragar

+0

Vuoi dire che * dovrei * o * non dovrei * usare htmlentities() da qualche parte? In questo momento non lo sono. I dati HTML provengono direttamente da un database. – Rein

risposta

3

è possibile decodificare il risultato di strip_tags usando html_entity_decode o rimuoverli utilizzando preg_replace:

$text = strip_tags($html_text); 
$content = preg_replace("/&#?[a-z0-9]{2,8};/i","",$text); 

e per rimuovere gli spazi bianchi dall'inizio delle linee utilizzano ltrim:

$content = join("\n", array_map("ltrim", explode("\n", $content))); 

per mantenere gli apostrofi utilizzare invece:

$text = strip_tags($html_text); 
$text = str_replace("&rsquo;","'", $text); 
$content = preg_replace("/&#?[a-z0-9]{2,8};/i","",$text); 
+0

È grandioso! Quasi lì. L'unica cosa è che gli apostrofi ora sono completamente spariti. Può essere risolto con un aggiustamento minore? – Rein

+0

hai utilizzato html_entity_decode o preg_replace? –

+0

Ho usato preg_replace come nella tua risposta. – Rein

0

uso PHP Tidy libreria per pulire il codice HTML. Ma nel tuo caso userei la classe DOMDocument per ottenere dati da html.

3

I caratteri sembrano entità html. Prova:

html_entity_decode(strip_tags($my_html_code)); 
+0

Per qualche ragione questo non li cambia ... – Rein

+0

Perfetto, questo ha funzionato a meraviglia per quello che stavo avendo un problema con. – Railto

Problemi correlati