anthoplara

Returns the portion without breaking HTML

May 18th, 2012
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.20 KB | None | 0 0
  1. function html_substr($text, $max_str) {
  2.     $qsingle = $qdouble = $pembuka = $penutup = $ambiltagawal = false;
  3.     $n_text = strip_tags($text);
  4.     $tagnya = $res = "";
  5.     $alltag = array();
  6.     $i = $n = 0;
  7.     while ($n<$max_str AND $i<strlen($text) AND $n<strlen($n_text)) {
  8.         $tanda  = $text[$i];
  9.         $res .= $tanda;
  10.         switch ($tanda) {
  11.             case ' ':
  12.                 if (!$pembuka) { $n++; } else { $ambiltagawal = false; }
  13.             break;
  14.             case '<':
  15.                 $ambiltagawal = $pembuka = true;
  16.             break;
  17.             case '>':
  18.                 if ($pembuka) {
  19.                     array_push($alltag, $tagnya);
  20.                     $pembuka = $ambiltagawal = false;
  21.                     $tagnya = "";
  22.                 } elseif ($penutup) {
  23.                     array_pop($alltag);
  24.                     $tagnya = "";
  25.                     $penutup = false;
  26.                 }
  27.             break;
  28.             case '/':
  29.                 if ($pembuka AND !$qdouble AND !$qsingle) {
  30.                     $pembuka = $ambiltagawal = false;
  31.                     $penutup  = true;
  32.                 }
  33.             break;
  34.             case '"':
  35.                 $qdouble = ($qdouble)?false:true;
  36.             break;
  37.             case "'":
  38.                 $qsingle = ($qsingle)?false:true;
  39.             break;
  40.             default:
  41.             if ($ambiltagawal OR $penutup) {
  42.                 $tagnya .= $tanda;
  43.             } elseif (!$pembuka AND !$penutup) {
  44.                 $n++;
  45.             }
  46.         }
  47.         $i++;
  48.     }
  49.  
  50.     while ($alltag) {
  51.         $res .= "</".array_pop($alltag).">";
  52.     }
  53.     return $res;
  54. }
Advertisement
Add Comment
Please, Sign In to add comment