123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- <?php
- function parseHtml($data, $remove_tags = FALSE) {
- $substs = array(
- //html
- 'TD' => chr(9),
- 'TH' => chr(9),
- 'TR' => chr(13) . chr(10) . '<P>',
- 'BR' => chr(13) . chr(10) . '<P>',
- 'BR/' => chr(13) . chr(10) . '<P>',
- 'DD' => chr(13) . chr(10) . '<P>',
- 'P' => chr(13) . chr(10) . '<P>',
- 'HR' => chr(13) . chr(10),
- 'LI' => chr(13) . chr(10),
- 'OL' => chr(13) . chr(10),
- '/OL' => chr(13) . chr(10),
- 'TABLE' => chr(13) . chr(10),
- '/TABLE' => chr(13) . chr(10),
- 'TITLE' => '<br> ',
- '/TITLE' => '<br> ',
- 'UL' => chr(13) . chr(10) . ' ',
- '/UL' => chr(13) . chr(10),
- // fb2
- 'EMPTY-LINE/' => '<P> ',
- 'STANZA' => '<P> ',
- 'V' => '<P>',
- '/POEM' => '<P> ',
- 'SUBTITLE' => '<br> <P>',
- '/SUBTITLE' => '<br> ',
- );
- $inner_cut = array(
- 'HEAD' => 1,
- 'SCRIPT' => 1,
- 'STYLE' => 1,
- //fb2
- 'BINARY' => 1,
- 'DESCRIPTION' => 1,
- );
- if ($remove_tags)
- $substs = $inner_cut = array();
- $data = str_replace(' ', ' ', $data);
- $i = 0;
- $len = strlen($data);
- $out = '';
- $cut_counter = 0;
- $cut_tag = '';
- while ($i < $len) {
- $left = strpos($data, '<', $i);
- if ($left !== FALSE) {
- $right = strpos($data, '>', $left + 1);
- if ($right !== FALSE) {
- $tag = trim(substr($data, $left + 1, $right - $left - 1));
- $first_space = strpos($tag, ' ');
- if ($first_space !== FALSE)
- $tag = substr($tag, 0, $first_space);
- $tag = strtoupper($tag);
- if (!$cut_counter) {
- $out .= substr($data, $i, $left - $i);
- if (isset($substs[$tag]))
- $out .= $substs[$tag];
- }
- if (isset($inner_cut[$tag]) && (!$cut_counter || $cut_tag == $tag))
- {
- if (!$cut_counter)
- $cut_tag = $tag;
- $cut_counter++;
- }
- if ($tag != '' && $tag[0] == '/' && $cut_tag == substr($tag, 1)) {
- $cut_counter = ($cut_counter > 0) ? $cut_counter - 1 : 0;
- if (!$cut_counter)
- $cut_tag = '';
- }
- //$close_tag = substr($tag, 1);
- //$out .= "<br>$cut_counter, $cut_tag == $close_tag";
- $i = $right + 1;
- } else
- break;
- }
- else
- break;
- }
- if ($i < $len && !$cut_counter)
- $out .= substr($data, $i, $len - $i);
- return $out;
- }
- ?>
|