2012-05-04 12 views
5

Mam kilka danych HTML, które piszę do pliku PDF przy użyciu PHP. W pliku PDF chcę, aby cały HTML był usuwany i czyszczony. Tak na przykład:Oczyszczanie kodu HTML za pomocą PHP w celu utworzenia czystego łańcucha

<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> 

powinien stać:

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

Jednakże, jeśli po prostu użyć strip_tags(), mam coś takiego:

First list item&#8232; 

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

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

pamiętać również wcięcia wyjściu.

Jakieś wskazówki, jak poprawnie oczyścić HTML na ładne, czyste ciągi bez bałagania i dziwnych znaków?

Dzięki :)

+2

Wątpię, że samo 'strip_tags()' zakoduje twoje encje. Czy na pewno nie brakuje Ci połączenia z 'htmlentities'? – Yoshi

+1

Wcięcie jest dokładnie tym, czego oczekiwałbym, PHP rozbiera znaczniki, ale nie dodatkowy tekst dookoła nich. – scragar

+0

Czy masz na myśli, że I * powinien * lub * nie powinien * używać htmlentities() gdzieś? W tej chwili nie jestem. Dane HTML pochodzą bezpośrednio z bazy danych. – Rein

Odpowiedz

3

można dekodować wynik strip_tags użyciu html_entity_decode lub usunąć je za pomocą preg_replace:

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

i usunięcie spacji z początku twojej linie używać ltrim:

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

zamiast tego używać apostrofów:

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

To świetnie! Prawie na miejscu. Jedyne, co się dzieje, to to, że apostrofy zupełnie zniknęły. Czy można to naprawić za pomocą drobnej regulacji? – Rein

+0

użyłeś html_entity_decode lub preg_replace? –

+0

Użyłem preg_replace jak w Twojej odpowiedzi. – Rein

0

użytku PHP Tidy biblioteki do czyszczenia kodu HTML. Ale w twoim przypadku użyłbym klasy DOMDocument, aby uzyskać dane z html.

3

Znaki wydają się być obiektami html. Spróbuj:

html_entity_decode(strip_tags($my_html_code)); 
+0

Z jakiegoś powodu to ich nie zmienia ... – Rein

+0

Idealne, to działało na nagrodę za to, z czym miałem problem. – Railto

Powiązane problemy