Удаление/преобразование html-артефактов из html-текста электронной почты в php/laravel

#php #html #laravel

Вопрос:

Я использую пакет IMAP в laravel для получения основных сообщений электронной почты, но я все еще получаю много HTML-артефактов даже после некоторой зачистки.

Я использую эти функции прямо сейчас:

         $styles_removed = preg_replace('/(<(script|style)b[^>]*>).*?(</2>)/is', "$1$3", $body);
        $fixed_body = strip_tags($styles_removed);
        $strip_body = utf8_decode($fixed_body);
        $formatted_body = preg_replace('/s |body {.*}/', ' ', $strip_body); 
 

После этого я сбрасываю $formatted_body и получаю этот пример:

 I?m trying to start a thread amp;amp;nbsp; amp;amp;nbsp; Jon Doe amp;amp;nbsp;amp;amp;nbsp; Sales amp;amp;amp; Service amp;amp;nbsp;amp;amp;nbsp;
 

Мне не хватает функции, которую я должен использовать поверх существующих, которые преобразовывали бы amp;amp и nbsp в их фактические символы?

Ответ №1:

 $formatted_body = 'I?m trying to start a thread amp;amp;nbsp; amp;amp;nbsp; Jon Doe amp;amp;nbsp;amp;amp;nbsp; Sales amp;amp;amp; Service amp;amp;nbsp;amp;amp;nbsp;';

$content = preg_replace('/[^Srn] /',' ',trim(str_replace(['amp;nbsp;','amp;amp;'],[' ','amp;'],htmlspecialchars_decode($formatted_body ,ENT_QUOTES|ENT_COMPAT))));

echo $content;
 

Что приводит к

 I?m trying to start a thread Jon Doe Sales amp; Service
 

Я не знаю , почему ? это в том single quotes , что должно amp;apos;