Создать простой текст из HTML

Я работаю над функцией, которая будет конвертировать HTML в текстовую версию с помощью php. Я пытался с strip_tags() следующее,

  $html='<style type="text/css">
  @media only screen and (max-width: 480px) {
    .message_mobile {
        width: 100% !important;
    }
  }
 </style>
<p class="message_mobile"> sample Text</p>';
$plain_text       =strip_tags($html);
echo $plain_text;

Но это создаст вывод, как,

 @media only screen and (max-width: 480px) {
    .message_mobile {
        width: 100% !important;
    }
  }

  sample Text

Но мне не нужно содержимое внутри <style> tag.Как это сделать? И у меня есть еще одна проблема, когда я пытаюсь удалить теги с таблицы, это создаст нежелательные линейные тормоза. Как решить эти проблемы? Есть ли хорошие методы для создания простого текста из HTML?

3 ответа

Функция, которую вы ищете - htmlspecialchars.

Этот код:

<?php
    $htmltag  = '
    <style type="text/css">
        @media only screen and (max-width: 480px) {
            .message_mobile {
                width: 100% !important;
            }
        }
    </style>
    <p class="message_mobile"> sample Text</p>';
    echo "<pre>".nl2br(htmlspecialchars($htmltag))."</pre>";
?>

создаст этот вывод на вашем сайте:

<style type="text/css">

    @media only screen and (max-width: 480px) {

        .message_mobile {

            width: 100% !important;

        }

    }

</style>

<p class="message_mobile"> sample Text</p>

Используйте эту функцию:

<?php

function strip_html_tags($str){
    $str = preg_replace('/(<|>)\1{2}/is', '', $str);
    $str = preg_replace(
        array(// Remove invisible content
            '@<head[^>]*?>.*?</head>@siu',
            '@<style[^>]*?>.*?</style>@siu',
            '@<script[^>]*?.*?</script>@siu',
            '@<noscript[^>]*?.*?</noscript>@siu',
            ),
        "", //replace above with nothing
        $str );
    $str = replaceWhitespace($str);
    $str = strip_tags($str);
    return $str;
} //function strip_html_tags ENDS

//To replace all types of whitespace with a single space
function replaceWhitespace($str) {
    $result = $str;
    foreach (array(
    "  ", " \t",  " \r",  " \n",
    "\t\t", "\t ", "\t\r", "\t\n",
    "\r\r", "\r ", "\r\t", "\r\n",
    "\n\n", "\n ", "\n\t", "\n\r",
    ) as $replacement) {
    $result = str_replace($replacement, $replacement[0], $result);
    }
    return $str !== $result ? replaceWhitespace($result) : $result;
}


$html='<style type="text/css">
  @media only screen and (max-width: 480px) {
    .message_mobile {
        width: 100% !important;
    }
  }
 </style>
<p class="message_mobile"> sample Text</p>';
$plain_text = strip_html_tags($html);
echo $plain_text;

Вы можете использовать классы для создания простого текста из HTML.

Посетите эту ссылку, это может вам помочь. Преобразование HTML в обычный текст в PHP для электронной почты

Классы: http://www.howtocreate.co.uk/php/html2texthowto.html

Попробуйте это, это помогает мне

http://code.google.com/p/iaml/source/browse/trunk/org.openiaml.model.runtime/src/include/html2text

Другие вопросы по тегам