Создание чистого текста с использованием php

Я использую службу, в которой я получаю сгенерированную строку. Строки обычно похожи:

Hello   Mr   John Doe, you are now registered \t. Hello &nbsb; Mr   John Doe, your phone number is &nbsb; 555-555-555 &nbs; \n 

Мне нужно удалить все html-объекты и все \ t и \ n и т. Д.

Я могу использовать html_entity_decode , чтобы удалить ни одно прерывание пробелов и использовать str_replace для удаления \t или \n , но есть ли более общий способ? некоторые вещи, которые заставляют вас убедиться, что в строке нет ничего, кроме символов алфавита (некоторая строка, которая не содержит кодов).

Если я правильно понял ваше дело, вы в основном хотите конвертировать из HTML в обычный текст.

В зависимости от сложности вашего ввода и требуемой надежности и точности, у вас есть несколько вариантов:

  • Используйте strip_tags (), чтобы удалить теги HTML, mb_convert_encoding () с HTML-ENTITIES качестве исходной кодировки для декодирования объектов и либо strtr (), либо preg_replace (), чтобы выполнить любую дополнительную замену:

     $html = "<p>Hello &nbsp; Mr &nbsp; John Doe, you are now registered. Hello &nbsp; Mr &nbsp; John Doe, your phone number is &nbsp; 555-555-555 &nbsp; Test: &euro;/&eacute;</p>"; $plain_text = $html; $plain_text = strip_tags($plain_text); $plain_text = mb_convert_encoding($plain_text, 'UTF-8', 'HTML-ENTITIES'); $plain_text = strtr($plain_text, [ "\t" => ' ', "\r" => ' ', "\n" => ' ', ]); $plain_text = preg_replace('/\s+/u', ' ', $plain_text); var_dump($html, $plain_text); 
  • Используйте подходящий парсер DOM плюс возможно preg_replace() для дальнейшей настройки:

     $html = "<p>Hello &nbsp; Mr &nbsp; John Doe, you are now registered. Hello &nbsp; Mr &nbsp; John Doe, your phone number is &nbsp; 555-555-555 &nbsp; Test: &euro;/&eacute;</p>"; $dom = new DOMDocument(); libxml_use_internal_errors(true); $dom->loadHTML($html); libxml_use_internal_errors(false); $xpath = new DOMXPath($dom); $plain_text = ''; foreach ($xpath->query('//text()') as $textNode) { $plain_text .= $textNode->nodeValue; } $plain_text = preg_replace('/\s+/u', ' ', $plain_text); var_dump($html, $plain_text); 

Оба решения должны печатать что-то вроде этого:

 string(169) "<p>Hello &nbsp; Mr &nbsp; John Doe, you are now registered. Hello &nbsp; Mr &nbsp; John Doe, your phone number is &nbsp; 555-555-555 &nbsp; Test: &euro;/&eacute;</p>" string(107) "Hello Mr John Doe, you are now registered. Hello Mr John Doe, your phone number is 555-555-555 Test: €/é"