Я использую службу, в которой я получаю сгенерированную строку. Строки обычно похожи:
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 Mr John Doe, you are now registered. Hello Mr John Doe, your phone number is 555-555-555 Test: €/é</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 Mr John Doe, you are now registered. Hello Mr John Doe, your phone number is 555-555-555 Test: €/é</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 Mr John Doe, you are now registered. Hello Mr John Doe, your phone number is 555-555-555 Test: €/é</p>" string(107) "Hello Mr John Doe, you are now registered. Hello Mr John Doe, your phone number is 555-555-555 Test: €/é"