2012-05-04 1 views
5

У меня есть куча данных HTML, которые я пишу в файл PDF с помощью PHP. В PDF я хочу, чтобы весь HTML был удален и очищен. Так, например:Очистка HTML с PHP для создания чистой строки

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

должны стать:

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

Однако, если я просто использовать strip_tags(), я получаю что-то вроде этого:

First list item&#8232; 

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

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

отметить также отступа выход.

Любые советы о том, как правильно очищать HTML до хороших чистых строк без беспорядочных пробелов и нечетных символов?

Спасибо :)

+2

Я сомневаюсь, что 'strip_tags()' будет только кодировать ваши объекты. Вы уверены, что где-то не звонили «htmlentities»? – Yoshi

+1

Отступы - это именно то, что я ожидаю, PHP отделяет теги, но не дополнительный текст вокруг них. – scragar

+0

Вы имеете в виду I * should * или * should not * использовать htmlentities() где-нибудь? В данный момент я не. Данные HTML поступают прямо из базы данных. – Rein

ответ

3

вы можете расшифровать результат strip_tags помощью html_entity_decode или удалить их с помощью preg_replace:

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

и удалить пробелы из начала вашей линии используют ltrim:

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

, чтобы использовать апострофы:

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

Отлично! Почти готово. Единственное, что апострофы теперь полностью исчезли. Может ли это быть исправлено с незначительной корректировкой? – Rein

+0

Вы использовали html_entity_decode или preg_replace? –

+0

Я использовал preg_replace как в вашем ответе. – Rein

0

использование PHP Tidy библиотека для очистки HTML. Но в вашем случае я бы использовал класс DOMDocument для получения данных из html.

3

Персонажи кажутся объектами html. Попробуйте:

html_entity_decode(strip_tags($my_html_code)); 
+0

По какой-то причине это не меняет их ... – Rein

+0

Отлично, это сработало для того, с чем у меня возникла проблема. – Railto