<?php
  include_once '../doc-typo3-funcs.php';
  $doxygen_vars = array(	"title" => "TYPO3 4.0.1: typo3_src-4.0.1/t3lib/class.t3lib_parsehtml.php Source File",
				"datetime" => "Sat Dec 2 19:22:18 2006",
				"date" => "2 Dec 2006",
				"doxygenversion" => "1.4.6",
				"projectname" => "TYPO3 4.0.1",
				"projectnumber" => "4.0.1"
			);
  get_header($doxygen_vars);
?>
<!-- Generated by Doxygen 1.4.6 -->
<div class="tabs">
  <ul>
    <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
    <li><a href="classes.html"><span>Classes</span></a></li>
    <li id="current"><a href="files.html"><span>Files</span></a></li>
    <li><a href="dirs.html"><span>Directories</span></a></li>
    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
    <li><a href="examples.html"><span>Examples</span></a></li>
    <li>
      <form action="search.php" method="get">
        <table cellspacing="0" cellpadding="0" border="0">
          <tr>
            <td><label>&nbsp;<u>S</u>earch&nbsp;for&nbsp;</label></td>
            <td><input type="text" name="query" value="" size="20" accesskey="s"/></td>
          </tr>
        </table>
      </form>
    </li>
  </ul></div>
<div class="nav">
<a class="el" href="dir_c8daf1ad746050abf985cc546c89e248.html">typo3_src-4.0.1</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_9d0e5c424a38b69aeeedc616a9634e5f.html">t3lib</a></div>
<h1>class.t3lib_parsehtml.php</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 &lt;?php
<a name="l00002"></a>00002 <span class="comment">/***************************************************************</span>
<a name="l00003"></a>00003 <span class="comment">*  Copyright notice</span>
<a name="l00004"></a>00004 <span class="comment">*</span>
<a name="l00005"></a>00005 <span class="comment">*  (c) 1999-2006 Kasper Skaarhoj (kasperYYYY@typo3.com)</span>
<a name="l00006"></a>00006 <span class="comment">*  All rights reserved</span>
<a name="l00007"></a>00007 <span class="comment">*</span>
<a name="l00008"></a>00008 <span class="comment">*  This script is part of the TYPO3 project. The TYPO3 project is</span>
<a name="l00009"></a>00009 <span class="comment">*  free software; you can redistribute it and/or modify</span>
<a name="l00010"></a>00010 <span class="comment">*  it under the terms of the GNU General Public License as published by</span>
<a name="l00011"></a>00011 <span class="comment">*  the Free Software Foundation; either version 2 of the License, or</span>
<a name="l00012"></a>00012 <span class="comment">*  (at your option) any later version.</span>
<a name="l00013"></a>00013 <span class="comment">*</span>
<a name="l00014"></a>00014 <span class="comment">*  The GNU General Public License can be found at</span>
<a name="l00015"></a>00015 <span class="comment">*  http://www.gnu.org/copyleft/gpl.html.</span>
<a name="l00016"></a>00016 <span class="comment">*  A copy is found in the textfile GPL.txt and important notices to the license</span>
<a name="l00017"></a>00017 <span class="comment">*  from the author is found in LICENSE.txt distributed with these scripts.</span>
<a name="l00018"></a>00018 <span class="comment">*</span>
<a name="l00019"></a>00019 <span class="comment">*</span>
<a name="l00020"></a>00020 <span class="comment">*  This script is distributed in the hope that it will be useful,</span>
<a name="l00021"></a>00021 <span class="comment">*  but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00022"></a>00022 <span class="comment">*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<a name="l00023"></a>00023 <span class="comment">*  GNU General Public License for more details.</span>
<a name="l00024"></a>00024 <span class="comment">*</span>
<a name="l00025"></a>00025 <span class="comment">*  This copyright notice MUST APPEAR in all copies of the script!</span>
<a name="l00026"></a>00026 <span class="comment">***************************************************************/</span>
<a name="l00106"></a><a class="code" href="classt3lib__parsehtml.html">00106</a> <span class="keyword">class </span><a class="code" href="classt3lib__parsehtml.html">t3lib_parsehtml</a>   {
<a name="l00107"></a><a class="code" href="classt3lib__parsehtml.html#3b39003c4f0bbd9f142222525713b75b">00107</a>         var <a class="code" href="classt3lib__parsehtml.html#3b39003c4f0bbd9f142222525713b75b">$caseShift_cache</a>=array();
<a name="l00108"></a>00108 
<a name="l00109"></a>00109 
<a name="l00110"></a>00110         <span class="comment">// *******************************************'</span>
<a name="l00111"></a>00111         <span class="comment">// COPY FROM class.tslib_content.php: / BEGIN</span>
<a name="l00112"></a>00112         <span class="comment">// substituteSubpart</span>
<a name="l00113"></a>00113         <span class="comment">// Cleaned locally 2/2003 !!!! (so different from tslib_content version)</span>
<a name="l00114"></a>00114         <span class="comment">// *******************************************'</span>
<a name="l00115"></a>00115 
<a name="l00123"></a><a class="code" href="classt3lib__parsehtml.html#2cad189468200f3caedca5163ddc40d4">00123</a>         function <a class="code" href="classt3lib__parsehtml.html#2cad189468200f3caedca5163ddc40d4">getSubpart</a>($content, $marker)  {
<a name="l00124"></a>00124                 $start = strpos($content, $marker);
<a name="l00125"></a>00125                 <span class="keywordflow">if</span> ($start===<span class="keyword">false</span>)     { <span class="keywordflow">return</span> ''; }
<a name="l00126"></a>00126                 $start += strlen($marker);
<a name="l00127"></a>00127                 $stop = strpos($content, $marker, $start);
<a name="l00128"></a>00128                         <span class="comment">// Q: What shall get returned if no stop marker is given /*everything till the end*/ or nothing</span>
<a name="l00129"></a>00129                 <span class="keywordflow">if</span> ($stop===<span class="keyword">false</span>)      { <span class="keywordflow">return</span> <span class="comment">/*substr($content, $start)*/</span> ''; }
<a name="l00130"></a>00130                 $content = substr($content, $start, $stop-$start);
<a name="l00131"></a>00131                 $matches = array();
<a name="l00132"></a>00132                 <span class="keywordflow">if</span> (preg_match('/^([^\&lt;]*\-\-\&gt;)(.*)(\&lt;\!\-\-[^\&gt;]*)$/s', $content, $matches)===1)      {
<a name="l00133"></a>00133                         <span class="keywordflow">return</span> $matches[2];
<a name="l00134"></a>00134                 }
<a name="l00135"></a>00135                 $matches = array();
<a name="l00136"></a>00136                 <span class="keywordflow">if</span> (preg_match('/(.*)(\&lt;\!\-\-[^\&gt;]*)$/s', $content, $matches)===1)     {
<a name="l00137"></a>00137                         <span class="keywordflow">return</span> $matches[1];
<a name="l00138"></a>00138                 }
<a name="l00139"></a>00139                 $matches = array();
<a name="l00140"></a>00140                 <span class="keywordflow">if</span> (preg_match('/^([^\&lt;]*\-\-\&gt;)(.*)$/s', $content, $matches)===1)      {
<a name="l00141"></a>00141                         <span class="keywordflow">return</span> $matches[2];
<a name="l00142"></a>00142                 }
<a name="l00143"></a>00143                 <span class="keywordflow">return</span> $content;
<a name="l00144"></a>00144         }
<a name="l00145"></a>00145 
<a name="l00156"></a><a class="code" href="classt3lib__parsehtml.html#496b21a1065d4da04682e398ee8bcef4">00156</a>         function <a class="code" href="classt3lib__parsehtml.html#496b21a1065d4da04682e398ee8bcef4">substituteSubpart</a>($content,$marker,$subpartContent,$recursive=1,$keepMarker=0) {
<a name="l00157"></a>00157                 $start = strpos($content, $marker);
<a name="l00158"></a>00158                 <span class="keywordflow">if</span> ($start===<span class="keyword">false</span>)     { <span class="keywordflow">return</span> $content; }
<a name="l00159"></a>00159                 $startAM = $start+strlen($marker);
<a name="l00160"></a>00160                 $stop = strpos($content, $marker, $startAM);
<a name="l00161"></a>00161                 <span class="keywordflow">if</span> ($stop===<span class="keyword">false</span>)      { <span class="keywordflow">return</span> $content; }
<a name="l00162"></a>00162                 $stopAM = $stop+strlen($marker);
<a name="l00163"></a>00163                 $before = substr($content, 0, $start);
<a name="l00164"></a>00164                 $after = substr($content, $stopAM);
<a name="l00165"></a>00165                 $between = substr($content, $startAM, $stop-$startAM);
<a name="l00166"></a>00166 
<a name="l00167"></a>00167                 <span class="keywordflow">if</span> ($recursive) {
<a name="l00168"></a>00168                         $after = <a class="code" href="classt3lib__parsehtml.html#496b21a1065d4da04682e398ee8bcef4">t3lib_parsehtml::substituteSubpart</a>($after, $marker, $subpartContent, $recursive, $keepMarker);
<a name="l00169"></a>00169                 }
<a name="l00170"></a>00170 
<a name="l00171"></a>00171                 <span class="keywordflow">if</span> ($keepMarker)        {
<a name="l00172"></a>00172                         $matches = array();
<a name="l00173"></a>00173                         <span class="keywordflow">if</span> (preg_match('/^([^\&lt;]*\-\-\&gt;)(.*)(\&lt;\!\-\-[^\&gt;]*)$/s', $between, $matches)===1)      {
<a name="l00174"></a>00174                                 $before .= $marker.$matches[1];
<a name="l00175"></a>00175                                 $between = $matches[2];
<a name="l00176"></a>00176                                 $after = $matches[3].$marker.$after;
<a name="l00177"></a>00177                         } elseif (preg_match('/^(.*)(\&lt;\!\-\-[^\&gt;]*)$/s', $between, $matches)===1)      {
<a name="l00178"></a>00178                                 $before .= $marker;
<a name="l00179"></a>00179                                 $between = $matches[1];
<a name="l00180"></a>00180                                 $after = $matches[2].$marker.$after;
<a name="l00181"></a>00181                         } elseif (preg_match('/^([^\&lt;]*\-\-\&gt;)(.*)$/s', $between, $matches)===1)        {
<a name="l00182"></a>00182                                 $before .= $marker.$matches[1];
<a name="l00183"></a>00183                                 $between = $matches[2];
<a name="l00184"></a>00184                                 $after = $marker.$after;
<a name="l00185"></a>00185                         } <span class="keywordflow">else</span>  {
<a name="l00186"></a>00186                                 $before .= $marker;
<a name="l00187"></a>00187                                 $after = $marker.$after;
<a name="l00188"></a>00188                         }
<a name="l00189"></a>00189                 } <span class="keywordflow">else</span>  {
<a name="l00190"></a>00190                         $matches = array();
<a name="l00191"></a>00191                         <span class="keywordflow">if</span> (preg_match('/^(.*)\&lt;\!\-\-[^\&gt;]*$/s', $before, $matches)===1)       {
<a name="l00192"></a>00192                                 $before = $matches[1];
<a name="l00193"></a>00193                         }
<a name="l00194"></a>00194                         <span class="keywordflow">if</span> (is_array($subpartContent))  {
<a name="l00195"></a>00195                                 $matches = array();
<a name="l00196"></a>00196                                 <span class="keywordflow">if</span> (preg_match('/^([^\&lt;]*\-\-\&gt;)(.*)(\&lt;\!\-\-[^\&gt;]*)$/s', $between, $matches)===1)      {
<a name="l00197"></a>00197                                         $between = $matches[2];
<a name="l00198"></a>00198                                 } elseif (preg_match('/^(.*)(\&lt;\!\-\-[^\&gt;]*)$/s', $between, $matches)===1)      {
<a name="l00199"></a>00199                                         $between = $matches[1];
<a name="l00200"></a>00200                                 } elseif (preg_match('/^([^\&lt;]*\-\-\&gt;)(.*)$/s', $between, $matches)===1)        {
<a name="l00201"></a>00201                                         $between = $matches[2];
<a name="l00202"></a>00202                                 }
<a name="l00203"></a>00203                         }
<a name="l00204"></a>00204                         $matches = array();
<a name="l00205"></a>00205                         <span class="keywordflow">if</span> (preg_match('/^[^\&lt;]*\-\-\&gt;(.*)$/s', $after, $matches)===1)  {
<a name="l00206"></a>00206                                 $after = $matches[1];
<a name="l00207"></a>00207                         }
<a name="l00208"></a>00208                 }
<a name="l00209"></a>00209 
<a name="l00210"></a>00210                 <span class="keywordflow">if</span> (is_array($subpartContent))  {
<a name="l00211"></a>00211                         $between = $subpartContent[0].$between.$subpartContent[1];
<a name="l00212"></a>00212                 } <span class="keywordflow">else</span>  {
<a name="l00213"></a>00213                         $between = $subpartContent;
<a name="l00214"></a>00214                 }
<a name="l00215"></a>00215 
<a name="l00216"></a>00216                 <span class="keywordflow">return</span> $before.$between.$after;
<a name="l00217"></a>00217         }
<a name="l00218"></a>00218 
<a name="l00219"></a>00219 
<a name="l00220"></a>00220         <span class="comment">// *******************************************'</span>
<a name="l00221"></a>00221         <span class="comment">// COPY FROM class.tslib_content.php: / END</span>
<a name="l00222"></a>00222         <span class="comment">// *******************************************'</span>
<a name="l00223"></a>00223 
<a name="l00224"></a>00224 
<a name="l00225"></a>00225 
<a name="l00226"></a>00226 
<a name="l00227"></a>00227 
<a name="l00228"></a>00228 
<a name="l00229"></a>00229 
<a name="l00230"></a>00230         <span class="comment">/************************************</span>
<a name="l00231"></a>00231 <span class="comment">         *</span>
<a name="l00232"></a>00232 <span class="comment">         * Parsing HTML code</span>
<a name="l00233"></a>00233 <span class="comment">         *</span>
<a name="l00234"></a>00234 <span class="comment">         ************************************/</span>
<a name="l00235"></a>00235 
<a name="l00247"></a><a class="code" href="classt3lib__parsehtml.html#8c67d79543ef9e46e7561a156ee2f903">00247</a>         function <a class="code" href="classt3lib__parsehtml.html#8c67d79543ef9e46e7561a156ee2f903">splitIntoBlock</a>($tag,$content,$eliminateExtraEndTags=0) {
<a name="l00248"></a>00248                 $tags=array_unique(<a class="code" href="classt3lib__div.html#cfb87d585b85e9b32841bde40beaa96c">t3lib_div::trimExplode</a>(<span class="charliteral">','</span>,$tag,1));
<a name="l00249"></a>00249                 $regexStr = '/\&lt;\/?('.implode(<span class="charliteral">'|'</span>, $tags).')(\s*\&gt;|\s[^\&gt;]*\&gt;)/si';
<a name="l00250"></a>00250 
<a name="l00251"></a>00251                 $parts = preg_split($regexStr, $content);
<a name="l00252"></a>00252 
<a name="l00253"></a>00253                 $newParts=array();
<a name="l00254"></a>00254                 $pointer=strlen($parts[0]);
<a name="l00255"></a>00255                 $buffer=$parts[0];
<a name="l00256"></a>00256                 $nested=0;
<a name="l00257"></a>00257                 reset($parts);
<a name="l00258"></a>00258                 next($parts);
<a name="l00259"></a>00259                 <span class="keywordflow">while</span>(list($k,$v)=each($parts)) {
<a name="l00260"></a>00260                         $isEndTag= substr($content,$pointer,2)=='&lt;/' ? 1 : 0;
<a name="l00261"></a>00261                         $tagLen = strcspn(substr($content,$pointer),<span class="charliteral">'&gt;'</span>)+1;
<a name="l00262"></a>00262 
<a name="l00263"></a>00263                         <span class="keywordflow">if</span> (!$isEndTag) {       <span class="comment">// We meet a start-tag:</span>
<a name="l00264"></a>00264                                 <span class="keywordflow">if</span> (!$nested)   {       <span class="comment">// Ground level:</span>
<a name="l00265"></a>00265                                         $newParts[]=$buffer;    <span class="comment">// previous buffer stored</span>
<a name="l00266"></a>00266                                         $buffer='';
<a name="l00267"></a>00267                                 }
<a name="l00268"></a>00268                                 $nested++;      <span class="comment">// We are inside now!</span>
<a name="l00269"></a>00269                                 $mbuffer=substr($content,$pointer,strlen($v)+$tagLen);  <span class="comment">// New buffer set and pointer increased</span>
<a name="l00270"></a>00270                                 $pointer+=strlen($mbuffer);
<a name="l00271"></a>00271                                 $buffer.=$mbuffer;
<a name="l00272"></a>00272                         } <span class="keywordflow">else</span> {        <span class="comment">// If we meet an endtag:</span>
<a name="l00273"></a>00273                                 $nested--;      <span class="comment">// decrease nested-level</span>
<a name="l00274"></a>00274                                 $eliminated=0;
<a name="l00275"></a>00275                                 <span class="keywordflow">if</span> ($eliminateExtraEndTags &amp;&amp; $nested&lt;0)        {
<a name="l00276"></a>00276                                         $nested=0;
<a name="l00277"></a>00277                                         $eliminated=1;
<a name="l00278"></a>00278                                 } <span class="keywordflow">else</span> {
<a name="l00279"></a>00279                                         $buffer.=substr($content,$pointer,$tagLen);     <span class="comment">// In any case, add the endtag to current buffer and increase pointer</span>
<a name="l00280"></a>00280                                 }
<a name="l00281"></a>00281                                 $pointer+=$tagLen;
<a name="l00282"></a>00282                                 <span class="keywordflow">if</span> (!$nested &amp;&amp; !$eliminated)   {       <span class="comment">// if we're back on ground level, (and not by eliminating tags...</span>
<a name="l00283"></a>00283                                         $newParts[]=$buffer;
<a name="l00284"></a>00284                                         $buffer='';
<a name="l00285"></a>00285                                 }
<a name="l00286"></a>00286                                 $mbuffer=substr($content,$pointer,strlen($v));  <span class="comment">// New buffer set and pointer increased</span>
<a name="l00287"></a>00287                                 $pointer+=strlen($mbuffer);
<a name="l00288"></a>00288                                 $buffer.=$mbuffer;
<a name="l00289"></a>00289                         }
<a name="l00290"></a>00290 
<a name="l00291"></a>00291                 }
<a name="l00292"></a>00292                 $newParts[]=$buffer;
<a name="l00293"></a>00293                 <span class="keywordflow">return</span> $newParts;
<a name="l00294"></a>00294         }
<a name="l00295"></a>00295 
<a name="l00308"></a><a class="code" href="classt3lib__parsehtml.html#f1a9ef4c092e088e4f88bddfc0b19ca7">00308</a>         function <a class="code" href="classt3lib__parsehtml.html#f1a9ef4c092e088e4f88bddfc0b19ca7">splitIntoBlockRecursiveProc</a>($tag,$content,&amp;$procObj,$callBackContent,$callBackTags,$level=0)   {
<a name="l00309"></a>00309                 $parts = $this-&gt;<a class="code" href="classt3lib__parsehtml.html#8c67d79543ef9e46e7561a156ee2f903">splitIntoBlock</a>($tag,$content,TRUE);
<a name="l00310"></a>00310                 foreach($parts as $k =&gt; $v)     {
<a name="l00311"></a>00311                         <span class="keywordflow">if</span> ($k%2)       {
<a name="l00312"></a>00312                                 $firstTagName = $this-&gt;<a class="code" href="classt3lib__parsehtml.html#bd430c9617018e90add4aebc4cd86ebc">getFirstTagName</a>($v, TRUE);
<a name="l00313"></a>00313                                 $tagsArray = array();
<a name="l00314"></a>00314                                 $tagsArray['tag_start'] = $this-&gt;<a class="code" href="classt3lib__parsehtml.html#56fa1f5b334264eb615ab782de00a006">getFirstTag</a>($v);
<a name="l00315"></a>00315                                 $tagsArray['tag_end'] = '&lt;/'.$firstTagName.<span class="charliteral">'&gt;'</span>;
<a name="l00316"></a>00316                                 $tagsArray['tag_name'] = strtolower($firstTagName);
<a name="l00317"></a>00317                                 $tagsArray['add_level'] = 1;
<a name="l00318"></a>00318                                 $tagsArray['content'] = $this-&gt;<a class="code" href="classt3lib__parsehtml.html#f1a9ef4c092e088e4f88bddfc0b19ca7">splitIntoBlockRecursiveProc</a>($tag,$this-&gt;<a class="code" href="classt3lib__parsehtml.html#1977dbc136106401e1041560a7f18f1a">removeFirstAndLastTag</a>($v),$procObj,$callBackContent,$callBackTags,$level+$tagsArray['add_level']);
<a name="l00319"></a>00319 
<a name="l00320"></a>00320                                 <span class="keywordflow">if</span> ($callBackTags)      $tagsArray = $procObj-&gt;$callBackTags($tagsArray,$level);
<a name="l00321"></a>00321 
<a name="l00322"></a>00322                                 $parts[$k] =
<a name="l00323"></a>00323                                         $tagsArray['tag_start'].
<a name="l00324"></a>00324                                         $tagsArray['content'].
<a name="l00325"></a>00325                                         $tagsArray['tag_end'];
<a name="l00326"></a>00326                         } <span class="keywordflow">else</span> {
<a name="l00327"></a>00327                                 <span class="keywordflow">if</span> ($callBackContent)   $parts[$k] = $procObj-&gt;$callBackContent($parts[$k],$level);
<a name="l00328"></a>00328                         }
<a name="l00329"></a>00329                 }
<a name="l00330"></a>00330 
<a name="l00331"></a>00331                 <span class="keywordflow">return</span> implode('',$parts);
<a name="l00332"></a>00332         }
<a name="l00333"></a>00333 
<a name="l00344"></a><a class="code" href="classt3lib__parsehtml.html#78acce4ff051ab05b62d88a3cce6c369">00344</a>         function <a class="code" href="classt3lib__parsehtml.html#78acce4ff051ab05b62d88a3cce6c369">splitTags</a>($tag,$content)       {
<a name="l00345"></a>00345                 $tags = <a class="code" href="classt3lib__div.html#cfb87d585b85e9b32841bde40beaa96c">t3lib_div::trimExplode</a>(<span class="charliteral">','</span>,$tag,1);
<a name="l00346"></a>00346                 $regexStr = '/\&lt;('.implode(<span class="charliteral">'|'</span>, $tags).')(\s[^&gt;]*)?\/?&gt;/si';
<a name="l00347"></a>00347                 $parts = preg_split($regexStr, $content);
<a name="l00348"></a>00348 
<a name="l00349"></a>00349                 $pointer = strlen($parts[0]);
<a name="l00350"></a>00350                 $newParts = array();
<a name="l00351"></a>00351                 $newParts[] = $parts[0];
<a name="l00352"></a>00352                 reset($parts);
<a name="l00353"></a>00353                 next($parts);
<a name="l00354"></a>00354                 <span class="keywordflow">while</span>(list($k,$v)=each($parts)) {
<a name="l00355"></a>00355                         $tagLen = strcspn(substr($content,$pointer),<span class="charliteral">'&gt;'</span>)+1;
<a name="l00356"></a>00356 
<a name="l00357"></a>00357                                 <span class="comment">// Set tag:</span>
<a name="l00358"></a>00358                         $tag = substr($content,$pointer,$tagLen);       <span class="comment">// New buffer set and pointer increased</span>
<a name="l00359"></a>00359                         $newParts[] = $tag;
<a name="l00360"></a>00360                         $pointer+= strlen($tag);
<a name="l00361"></a>00361 
<a name="l00362"></a>00362                                 <span class="comment">// Set content:</span>
<a name="l00363"></a>00363                         $newParts[] = $v;
<a name="l00364"></a>00364                         $pointer+= strlen($v);
<a name="l00365"></a>00365                 }
<a name="l00366"></a>00366                 <span class="keywordflow">return</span> $newParts;
<a name="l00367"></a>00367         }
<a name="l00368"></a>00368 
<a name="l00378"></a><a class="code" href="classt3lib__parsehtml.html#8c1b3a5a81562acb8e8f2d6eb5430598">00378</a>         function <a class="code" href="classt3lib__parsehtml.html#8c1b3a5a81562acb8e8f2d6eb5430598">getAllParts</a>($parts,$tag_parts=1,$include_tag=1)        {
<a name="l00379"></a>00379                 $newParts=array();
<a name="l00380"></a>00380                 foreach ($parts as $k =&gt; $v)    {
<a name="l00381"></a>00381                         <span class="keywordflow">if</span> (($k+($tag_parts?0:1))%2)    {
<a name="l00382"></a>00382                                 <span class="keywordflow">if</span> (!$include_tag)      $v=$this-&gt;<a class="code" href="classt3lib__parsehtml.html#1977dbc136106401e1041560a7f18f1a">removeFirstAndLastTag</a>($v);
<a name="l00383"></a>00383                                 $newParts[]=$v;
<a name="l00384"></a>00384                         }
<a name="l00385"></a>00385                 }
<a name="l00386"></a>00386                 <span class="keywordflow">return</span> $newParts;
<a name="l00387"></a>00387         }
<a name="l00388"></a>00388 
<a name="l00396"></a><a class="code" href="classt3lib__parsehtml.html#1977dbc136106401e1041560a7f18f1a">00396</a>         function <a class="code" href="classt3lib__parsehtml.html#1977dbc136106401e1041560a7f18f1a">removeFirstAndLastTag</a>($str)    {
<a name="l00397"></a>00397                         <span class="comment">// End of first tag:</span>
<a name="l00398"></a>00398                 $start = strpos($str,<span class="charliteral">'&gt;'</span>);
<a name="l00399"></a>00399                         <span class="comment">// Begin of last tag:</span>
<a name="l00400"></a>00400                 $end = strrpos($str,<span class="charliteral">'&lt;'</span>);
<a name="l00401"></a>00401                         <span class="comment">// return</span>
<a name="l00402"></a>00402                 <span class="keywordflow">return</span> substr($str, $start+1, $end-$start-1);
<a name="l00403"></a>00403         }
<a name="l00404"></a>00404 
<a name="l00412"></a><a class="code" href="classt3lib__parsehtml.html#56fa1f5b334264eb615ab782de00a006">00412</a>         function <a class="code" href="classt3lib__parsehtml.html#56fa1f5b334264eb615ab782de00a006">getFirstTag</a>($str)      {
<a name="l00413"></a>00413                         <span class="comment">// First:</span>
<a name="l00414"></a>00414                 $endLen = strpos($str,<span class="charliteral">'&gt;'</span>)+1;
<a name="l00415"></a>00415                 <span class="keywordflow">return</span> substr($str,0,$endLen);
<a name="l00416"></a>00416         }
<a name="l00417"></a>00417 
<a name="l00426"></a><a class="code" href="classt3lib__parsehtml.html#bd430c9617018e90add4aebc4cd86ebc">00426</a>         function <a class="code" href="classt3lib__parsehtml.html#bd430c9617018e90add4aebc4cd86ebc">getFirstTagName</a>($str,$preserveCase=FALSE)      {
<a name="l00427"></a>00427                 $matches = array();
<a name="l00428"></a>00428                 <span class="keywordflow">if</span> (preg_match('/^\s*\&lt;([^\s\&gt;]+)(\s|\&gt;)/', $str, $matches)===1)        {
<a name="l00429"></a>00429                         <span class="keywordflow">if</span> (!$preserveCase)     {
<a name="l00430"></a>00430                                 <span class="keywordflow">return</span> strtoupper($matches[1]);
<a name="l00431"></a>00431                         }
<a name="l00432"></a>00432                         <span class="keywordflow">return</span> $matches[1];
<a name="l00433"></a>00433                 }
<a name="l00434"></a>00434                 <span class="keywordflow">return</span> '';
<a name="l00435"></a>00435         }
<a name="l00436"></a>00436 
<a name="l00445"></a><a class="code" href="classt3lib__parsehtml.html#2d46a8e8096a73041ce71ad4eaca2094">00445</a>         function <a class="code" href="classt3lib__parsehtml.html#2d46a8e8096a73041ce71ad4eaca2094">get_tag_attributes</a>($tag,$deHSC=0)      {
<a name="l00446"></a>00446                 list($components,$metaC) = $this-&gt;<a class="code" href="classt3lib__parsehtml.html#b17aeb55455484ca2a0a3dfa71ae2c48">split_tag_attributes</a>($tag);
<a name="l00447"></a>00447                 $name = '';      <span class="comment">// attribute name is stored here</span>
<a name="l00448"></a>00448                 $valuemode = <span class="keyword">false</span>;
<a name="l00449"></a>00449                 $attributes = array();
<a name="l00450"></a>00450                 $attributesMeta = array();
<a name="l00451"></a>00451                 <span class="keywordflow">if</span> (is_array($components))      {
<a name="l00452"></a>00452                         foreach ($components as $key =&gt; $val)   {
<a name="l00453"></a>00453                                 <span class="keywordflow">if</span> ($val != <span class="charliteral">'='</span>)        {       <span class="comment">// Only if $name is set (if there is an attribute, that waits for a value), that valuemode is enabled. This ensures that the attribute is assigned it's value</span>
<a name="l00454"></a>00454                                         <span class="keywordflow">if</span> ($valuemode) {
<a name="l00455"></a>00455                                                 <span class="keywordflow">if</span> ($name)      {
<a name="l00456"></a>00456                                                         $attributes[$name] = $deHSC?<a class="code" href="classt3lib__div.html#f240b4a85b87436f4eba15dd26487991">t3lib_div::htmlspecialchars_decode</a>($val):$val;
<a name="l00457"></a>00457                                                         $attributesMeta[$name]['dashType']=$metaC[$key];
<a name="l00458"></a>00458                                                         $name = '';
<a name="l00459"></a>00459                                                 }
<a name="l00460"></a>00460                                         } <span class="keywordflow">else</span> {
<a name="l00461"></a>00461                                                 <span class="keywordflow">if</span> ($namekey = preg_replace('/[^[:alnum:]_\:\-]/<span class="charliteral">','</span>',$val))     {
<a name="l00462"></a>00462                                                         $name = strtolower($namekey);
<a name="l00463"></a>00463                                                         $attributesMeta[$name]=array();
<a name="l00464"></a>00464                                                         $attributesMeta[$name]['origTag']=$namekey;
<a name="l00465"></a>00465                                                         $attributes[$name] = '';
<a name="l00466"></a>00466                                                 }
<a name="l00467"></a>00467                                         }
<a name="l00468"></a>00468                                         $valuemode = <span class="keyword">false</span>;
<a name="l00469"></a>00469                                 } <span class="keywordflow">else</span> {
<a name="l00470"></a>00470                                         $valuemode = <span class="keyword">true</span>;
<a name="l00471"></a>00471                                 }
<a name="l00472"></a>00472                         }
<a name="l00473"></a>00473                         <span class="keywordflow">return</span> array($attributes,$attributesMeta);
<a name="l00474"></a>00474                 }
<a name="l00475"></a>00475         }
<a name="l00476"></a>00476 
<a name="l00486"></a><a class="code" href="classt3lib__parsehtml.html#b17aeb55455484ca2a0a3dfa71ae2c48">00486</a>         function <a class="code" href="classt3lib__parsehtml.html#b17aeb55455484ca2a0a3dfa71ae2c48">split_tag_attributes</a>($tag)     {
<a name="l00487"></a>00487                 $matches = array();
<a name="l00488"></a>00488                 <span class="keywordflow">if</span> (preg_match('/(\&lt;[^\s]+\s+)?(.*?)\s*(\&gt;)?$/s', $tag, $matches)!==1)  {
<a name="l00489"></a>00489                         <span class="keywordflow">return</span> array(array(), array());
<a name="l00490"></a>00490                 }
<a name="l00491"></a>00491                 $tag_tmp = $matches[2];
<a name="l00492"></a>00492 
<a name="l00493"></a>00493                 $metaValue = array();
<a name="l00494"></a>00494                 $value = array();
<a name="l00495"></a>00495                 $matches = array();
<a name="l00496"></a>00496                 <span class="keywordflow">if</span> (preg_match_all('/(<span class="stringliteral">"[^"</span>]*<span class="stringliteral">"|\'[^\']*\'|[^\s"</span>\'\=]+|\=)/s', $tag_tmp, $matches)&gt;0)     {
<a name="l00497"></a>00497                         foreach ($matches[1] as $part)  {
<a name="l00498"></a>00498                                 $firstChar = substr($part, 0, 1);
<a name="l00499"></a>00499                                 <span class="keywordflow">if</span> ($firstChar==<span class="charliteral">'"'</span> || $firstChar==<span class="stringliteral">"'"</span>) {
<a name="l00500"></a>00500                                         $metaValue[] = $firstChar;
<a name="l00501"></a>00501                                         $value[] = substr($part, 1, -1);
<a name="l00502"></a>00502                                 } <span class="keywordflow">else</span>  {
<a name="l00503"></a>00503                                         $metaValue[] = '';
<a name="l00504"></a>00504                                         $value[] = $part;
<a name="l00505"></a>00505                                 }
<a name="l00506"></a>00506                         }
<a name="l00507"></a>00507                 }
<a name="l00508"></a>00508                 <span class="keywordflow">return</span> array($value,$metaValue);
<a name="l00509"></a>00509         }
<a name="l00510"></a>00510 
<a name="l00524"></a><a class="code" href="classt3lib__parsehtml.html#a67392c497d3718ae004af8566274c9e">00524</a>         function <a class="code" href="classt3lib__parsehtml.html#a67392c497d3718ae004af8566274c9e">checkTagTypeCounts</a>($content,$blockTags='a,b,blockquote,body,div,em,font,form,h1,h2,h3,h4,h5,h6,i,li,map,ol,option,p,pre,select,span,strong,table,td,textarea,tr,u,ul', $soloTags='br,hr,img,input,area')       {
<a name="l00525"></a>00525                 $content = strtolower($content);
<a name="l00526"></a>00526                 $analyzedOutput=array();
<a name="l00527"></a>00527                 $analyzedOutput['counts']=array();      <span class="comment">// Counts appearances of start-tags</span>
<a name="l00528"></a>00528                 $analyzedOutput['errors']=array();      <span class="comment">// Lists ERRORS</span>
<a name="l00529"></a>00529                 $analyzedOutput['warnings']=array();    <span class="comment">// Lists warnings.</span>
<a name="l00530"></a>00530                 $analyzedOutput['blocks']=array();      <span class="comment">// Lists stats for block-tags</span>
<a name="l00531"></a>00531                 $analyzedOutput['solo']=array();        <span class="comment">// Lists stats for solo-tags</span>
<a name="l00532"></a>00532 
<a name="l00533"></a>00533                         <span class="comment">// Block tags, must have endings...</span>
<a name="l00534"></a>00534                 $blockTags = explode(<span class="charliteral">','</span>,$blockTags);
<a name="l00535"></a>00535                 foreach($blockTags as $tagName) {
<a name="l00536"></a>00536                         $countBegin = count(preg_split('/\&lt;'.$tagName.'(\s|\&gt;)/s',$content))-1;
<a name="l00537"></a>00537                         $countEnd = count(preg_split('/\&lt;\/'.$tagName.'(\s|\&gt;)/s',$content))-1;
<a name="l00538"></a>00538                         $analyzedOutput['blocks'][$tagName]=array($countBegin,$countEnd,$countBegin-$countEnd);
<a name="l00539"></a>00539                         <span class="keywordflow">if</span> ($countBegin)        $analyzedOutput['counts'][$tagName]=$countBegin;
<a name="l00540"></a>00540                         <span class="keywordflow">if</span> ($countBegin-$countEnd)      {
<a name="l00541"></a>00541                                 <span class="keywordflow">if</span> ($countBegin-$countEnd &gt; 0)  {
<a name="l00542"></a>00542                                         $analyzedOutput['errors'][$tagName]='There were more start-tags ('.$countBegin.') than end-tags ('.$countEnd.') <span class="keywordflow">for</span> the element <span class="stringliteral">"'.$tagName.'"</span>. There should be an equal amount!';
<a name="l00543"></a>00543                                 } <span class="keywordflow">else</span> {
<a name="l00544"></a>00544                                         $analyzedOutput['warnings'][$tagName]='There were more end-tags ('.$countEnd.') than start-tags ('.$countBegin.') <span class="keywordflow">for</span> the element <span class="stringliteral">"'.$tagName.'"</span>. There should be an equal amount! However the problem is not fatal.';
<a name="l00545"></a>00545                                 }
<a name="l00546"></a>00546                         }
<a name="l00547"></a>00547                 }
<a name="l00548"></a>00548 
<a name="l00549"></a>00549                         <span class="comment">// Solo tags, must NOT have endings...</span>
<a name="l00550"></a>00550                 $soloTags = explode(<span class="charliteral">','</span>,$soloTags);
<a name="l00551"></a>00551                 foreach($soloTags as $tagName)  {
<a name="l00552"></a>00552                         $countBegin = count(preg_split('/\&lt;'.$tagName.'(\s|\&gt;)/s',$content))-1;
<a name="l00553"></a>00553                         $countEnd = count(preg_split('/\&lt;\/'.$tagName.'(\s|\&gt;)/s',$content))-1;
<a name="l00554"></a>00554                         $analyzedOutput['solo'][$tagName]=array($countBegin,$countEnd);
<a name="l00555"></a>00555                         <span class="keywordflow">if</span> ($countBegin)        $analyzedOutput['counts'][$tagName]=$countBegin;
<a name="l00556"></a>00556                         <span class="keywordflow">if</span> ($countEnd)  {
<a name="l00557"></a>00557                                 $analyzedOutput['warnings'][$tagName]='There were end-tags found ('.$countEnd.') <span class="keywordflow">for</span> the element <span class="stringliteral">"'.$tagName.'"</span>. This was not expected (although XHTML technically allows it).';
<a name="l00558"></a>00558                         }
<a name="l00559"></a>00559                 }
<a name="l00560"></a>00560 
<a name="l00561"></a>00561                 <span class="keywordflow">return</span> $analyzedOutput;
<a name="l00562"></a>00562         }
<a name="l00563"></a>00563 
<a name="l00564"></a>00564 
<a name="l00565"></a>00565 
<a name="l00566"></a>00566 
<a name="l00567"></a>00567 
<a name="l00568"></a>00568 
<a name="l00569"></a>00569 
<a name="l00570"></a>00570 
<a name="l00571"></a>00571 
<a name="l00572"></a>00572 
<a name="l00573"></a>00573 
<a name="l00574"></a>00574 
<a name="l00575"></a>00575         <span class="comment">/*********************************</span>
<a name="l00576"></a>00576 <span class="comment">         *</span>
<a name="l00577"></a>00577 <span class="comment">         * Clean HTML code</span>
<a name="l00578"></a>00578 <span class="comment">         *</span>
<a name="l00579"></a>00579 <span class="comment">         *********************************/</span>
<a name="l00580"></a>00580 
<a name="l00617"></a><a class="code" href="classt3lib__parsehtml.html#cdce5d51480e2f0814fdeddd70795847">00617</a>         function <a class="code" href="classt3lib__parsehtml.html#cdce5d51480e2f0814fdeddd70795847">HTMLcleaner</a>($content, $tags=array(),$keepAll=0,$hSC=0,$addConfig=array())      {
<a name="l00618"></a>00618                 $newContent = array();
<a name="l00619"></a>00619                 $tokArr = explode(<span class="charliteral">'&lt;'</span>,$content);
<a name="l00620"></a>00620                 $newContent[] = $this-&gt;processContent(current($tokArr),$hSC,$addConfig);
<a name="l00621"></a>00621                 next($tokArr);
<a name="l00622"></a>00622 
<a name="l00623"></a>00623                 $c = 1;
<a name="l00624"></a>00624                 $tagRegister = array();
<a name="l00625"></a>00625                 $tagStack = array();
<a name="l00626"></a>00626                 <span class="keywordflow">while</span>(list(,$tok)=each($tokArr))        {
<a name="l00627"></a>00627                         $firstChar = substr($tok,0,1);
<a name="l00628"></a>00628 <span class="preprocessor">#                       if (strcmp(trim($firstChar),''))        {               // It is a tag...</span>
<a name="l00629"></a>00629 <span class="preprocessor"></span>                        <span class="keywordflow">if</span> (preg_match('/[[:alnum:]\/]/',$firstChar)==1)        {               <span class="comment">// It is a tag... (first char is a-z0-9 or /) (fixed 19/01 2004). This also avoids triggering on &lt;?xml..&gt; and &lt;!DOCTYPE..&gt;</span>
<a name="l00630"></a>00630                                 $tagEnd = strpos($tok,<span class="charliteral">'&gt;'</span>);
<a name="l00631"></a>00631                                 <span class="keywordflow">if</span> ($tagEnd)    {       <span class="comment">// If there is and end-bracket...       tagEnd can't be 0 as the first character can't be a &gt;</span>
<a name="l00632"></a>00632                                         $endTag = $firstChar==<span class="charliteral">'/'</span> ? 1 : 0;
<a name="l00633"></a>00633                                         $tagContent = substr($tok,$endTag,$tagEnd-$endTag);
<a name="l00634"></a>00634                                         $tagParts = preg_split('/\s+/s',$tagContent,2);
<a name="l00635"></a>00635                                         $tagName = strtolower($tagParts[0]);
<a name="l00636"></a>00636                                         <span class="keywordflow">if</span> (isset($tags[$tagName]))     {
<a name="l00637"></a>00637                                                 <span class="keywordflow">if</span> (is_array($tags[$tagName]))  {       <span class="comment">// If there is processing to do for the tag:</span>
<a name="l00638"></a>00638 
<a name="l00639"></a>00639                                                         <span class="keywordflow">if</span> (!$endTag)   {       <span class="comment">// If NOT an endtag, do attribute processing (added dec. 2003)</span>
<a name="l00640"></a>00640                                                                         <span class="comment">// Override attributes</span>
<a name="l00641"></a>00641                                                                 <span class="keywordflow">if</span> (strcmp($tags[$tagName]['overrideAttribs'],''))      {
<a name="l00642"></a>00642                                                                         $tagParts[1]=$tags[$tagName]['overrideAttribs'];
<a name="l00643"></a>00643                                                                 }
<a name="l00644"></a>00644 
<a name="l00645"></a>00645                                                                         <span class="comment">// Allowed tags</span>
<a name="l00646"></a>00646                                                                 <span class="keywordflow">if</span> (strcmp($tags[$tagName]['allowedAttribs'],''))       {
<a name="l00647"></a>00647                                                                         <span class="keywordflow">if</span> (!strcmp($tags[$tagName]['allowedAttribs'],<span class="charliteral">'0'</span>))     {       <span class="comment">// No attribs allowed</span>
<a name="l00648"></a>00648                                                                                 $tagParts[1]='';
<a name="l00649"></a>00649                                                                         } elseif (trim($tagParts[1])) {
<a name="l00650"></a>00650                                                                                 $tagAttrib = $this-&gt;<a class="code" href="classt3lib__parsehtml.html#2d46a8e8096a73041ce71ad4eaca2094">get_tag_attributes</a>($tagParts[1]);
<a name="l00651"></a>00651                                                                                 $tagParts[1]='';
<a name="l00652"></a>00652                                                                                 $newTagAttrib = array();
<a name="l00653"></a>00653                                                                                 <span class="keywordflow">if</span> (!($tList = $tags[$tagName]['_allowedAttribs']))     {
<a name="l00654"></a>00654                                                                                                 <span class="comment">// Just explode attribts for tag once</span>
<a name="l00655"></a>00655                                                                                         $tList = $tags[$tagName]['_allowedAttribs'] = <a class="code" href="classt3lib__div.html#cfb87d585b85e9b32841bde40beaa96c">t3lib_div::trimExplode</a>(<span class="charliteral">','</span>,strtolower($tags[$tagName]['allowedAttribs']),1);
<a name="l00656"></a>00656                                                                                 }
<a name="l00657"></a>00657                                                                                 foreach ($tList as $allowTag)   {
<a name="l00658"></a>00658                                                                                         <span class="keywordflow">if</span> (isset($tagAttrib[0][$allowTag]))    $newTagAttrib[$allowTag]=$tagAttrib[0][$allowTag];
<a name="l00659"></a>00659                                                                                 }
<a name="l00660"></a>00660                                                                                 $tagParts[1]=$this-&gt;compileTagAttribs($newTagAttrib,$tagAttrib[1]);
<a name="l00661"></a>00661                                                                         }
<a name="l00662"></a>00662                                                                 }
<a name="l00663"></a>00663 
<a name="l00664"></a>00664                                                                         <span class="comment">// Fixed attrib values</span>
<a name="l00665"></a>00665                                                                 <span class="keywordflow">if</span> (is_array($tags[$tagName]['fixAttrib']))     {
<a name="l00666"></a>00666                                                                         $tagAttrib = $this-&gt;<a class="code" href="classt3lib__parsehtml.html#2d46a8e8096a73041ce71ad4eaca2094">get_tag_attributes</a>($tagParts[1]);
<a name="l00667"></a>00667                                                                         $tagParts[1]='';
<a name="l00668"></a>00668                                                                         reset($tags[$tagName]['fixAttrib']);
<a name="l00669"></a>00669                                                                         <span class="keywordflow">while</span>(list($attr,$params)=each($tags[$tagName]['fixAttrib']))   {
<a name="l00670"></a>00670                                                                                 <span class="keywordflow">if</span> (strlen($params['set']))     $tagAttrib[0][$attr] = $params['set'];
<a name="l00671"></a>00671                                                                                 <span class="keywordflow">if</span> (strlen($params['unset']))   unset($tagAttrib[0][$attr]);
<a name="l00672"></a>00672                                                                                 <span class="keywordflow">if</span> (strcmp($params['<span class="keywordflow">default</span>'],'') &amp;&amp; !isset($tagAttrib[0][$attr]))      $tagAttrib[0][$attr]=$params['<span class="keywordflow">default</span>'];
<a name="l00673"></a>00673                                                                                 <span class="keywordflow">if</span> ($params['always'] || isset($tagAttrib[0][$attr]))   {
<a name="l00674"></a>00674                                                                                         <span class="keywordflow">if</span> ($params['trim'])    {$tagAttrib[0][$attr]=trim($tagAttrib[0][$attr]);}
<a name="l00675"></a>00675                                                                                         <span class="keywordflow">if</span> ($params['intval'])  {$tagAttrib[0][$attr]=intval($tagAttrib[0][$attr]);}
<a name="l00676"></a>00676                                                                                         <span class="keywordflow">if</span> ($params['lower'])   {$tagAttrib[0][$attr]=strtolower($tagAttrib[0][$attr]);}
<a name="l00677"></a>00677                                                                                         <span class="keywordflow">if</span> ($params['upper'])   {$tagAttrib[0][$attr]=strtoupper($tagAttrib[0][$attr]);}
<a name="l00678"></a>00678                                                                                         <span class="keywordflow">if</span> ($params['range'])   {
<a name="l00679"></a>00679                                                                                                 <span class="keywordflow">if</span> (isset($params['range'][1])) {
<a name="l00680"></a>00680                                                                                                         $tagAttrib[0][$attr]=<a class="code" href="classt3lib__div.html#79f6a47a7658e28e3f65666f8ebc19f8">t3lib_div::intInRange</a>($tagAttrib[0][$attr],intval($params['range'][0]),intval($params['range'][1]));
<a name="l00681"></a>00681                                                                                                 } <span class="keywordflow">else</span> {
<a name="l00682"></a>00682                                                                                                         $tagAttrib[0][$attr]=<a class="code" href="classt3lib__div.html#79f6a47a7658e28e3f65666f8ebc19f8">t3lib_div::intInRange</a>($tagAttrib[0][$attr],intval($params['range'][0]));
<a name="l00683"></a>00683                                                                                                 }
<a name="l00684"></a>00684                                                                                         }
<a name="l00685"></a>00685                                                                                         <span class="keywordflow">if</span> (is_array($params['list']))  {
<a name="l00686"></a>00686                                                                                                 <span class="keywordflow">if</span> (!in_array($this-&gt;caseShift($tagAttrib[0][$attr],$params['casesensitiveComp']),$this-&gt;caseShift($params['list'],$params['casesensitiveComp'],$tagName)))     $tagAttrib[0][$attr]=$params['list'][0];
<a name="l00687"></a>00687                                                                                         }
<a name="l00688"></a>00688                                                                                         <span class="keywordflow">if</span> (($params['removeIfFalse'] &amp;&amp; $params['removeIfFalse']!='blank' &amp;&amp; !$tagAttrib[0][$attr]) || ($params['removeIfFalse']=='blank' &amp;&amp; !strcmp($tagAttrib[0][$attr],'')))        {
<a name="l00689"></a>00689                                                                                                 unset($tagAttrib[0][$attr]);
<a name="l00690"></a>00690                                                                                         }
<a name="l00691"></a>00691                                                                                         <span class="keywordflow">if</span> (strcmp($params['removeIfEquals'],'') &amp;&amp; !strcmp($this-&gt;caseShift($tagAttrib[0][$attr],$params['casesensitiveComp']),$this-&gt;caseShift($params['removeIfEquals'],$params['casesensitiveComp'])))      {
<a name="l00692"></a>00692                                                                                                 unset($tagAttrib[0][$attr]);
<a name="l00693"></a>00693                                                                                         }
<a name="l00694"></a>00694                                                                                         <span class="keywordflow">if</span> ($params['prefixLocalAnchors'])      {
<a name="l00695"></a>00695                                                                                                 <span class="keywordflow">if</span> (substr($tagAttrib[0][$attr],0,1)==<span class="charliteral">'#'</span>)      {
<a name="l00696"></a>00696                                                                                                         $prefix = <a class="code" href="classt3lib__div.html#cd7ecd00954e9a6b0c14eb23cf875d3f">t3lib_div::getIndpEnv</a>('TYPO3_REQUEST_URL');
<a name="l00697"></a>00697                                                                                                         $tagAttrib[0][$attr] = $prefix.$tagAttrib[0][$attr];
<a name="l00698"></a>00698                                                                                                         <span class="keywordflow">if</span> ($params['prefixLocalAnchors']==2 &amp;&amp; <a class="code" href="classt3lib__div.html#28d04de62f18c544013a1f75886d5c77">t3lib_div::isFirstPartOfStr</a>($prefix,<a class="code" href="classt3lib__div.html#cd7ecd00954e9a6b0c14eb23cf875d3f">t3lib_div::getIndpEnv</a>('TYPO3_SITE_URL')))           {
<a name="l00699"></a>00699                                                                                                                 $tagAttrib[0][$attr] = substr($tagAttrib[0][$attr],strlen(<a class="code" href="classt3lib__div.html#cd7ecd00954e9a6b0c14eb23cf875d3f">t3lib_div::getIndpEnv</a>('TYPO3_SITE_URL')));
<a name="l00700"></a>00700                                                                                                         }
<a name="l00701"></a>00701                                                                                                 }
<a name="l00702"></a>00702                                                                                         }
<a name="l00703"></a>00703                                                                                         <span class="keywordflow">if</span> ($params['prefixRelPathWith'])       {
<a name="l00704"></a>00704                                                                                                 $urlParts = parse_url($tagAttrib[0][$attr]);
<a name="l00705"></a>00705                                                                                                 <span class="keywordflow">if</span> (!$urlParts['scheme'] &amp;&amp; substr($urlParts['path'],0,1)!=<span class="charliteral">'/'</span>) {       <span class="comment">// If it is NOT an absolute URL (by http: or starting "/")</span>
<a name="l00706"></a>00706                                                                                                         $tagAttrib[0][$attr] = $params['prefixRelPathWith'].$tagAttrib[0][$attr];
<a name="l00707"></a>00707                                                                                                 }
<a name="l00708"></a>00708                                                                                         }
<a name="l00709"></a>00709                                                                                         <span class="keywordflow">if</span> ($params['userFunc'])        {
<a name="l00710"></a>00710                                                                                                 $tagAttrib[0][$attr] = <a class="code" href="classt3lib__div.html#1458e987700fb6f722ec5186644f6580">t3lib_div::callUserFunction</a>($params['userFunc'],$tagAttrib[0][$attr],$this);
<a name="l00711"></a>00711                                                                                         }
<a name="l00712"></a>00712                                                                                 }
<a name="l00713"></a>00713                                                                         }
<a name="l00714"></a>00714                                                                         $tagParts[1]=$this-&gt;compileTagAttribs($tagAttrib[0],$tagAttrib[1]);
<a name="l00715"></a>00715                                                                 }
<a name="l00716"></a>00716                                                         } <span class="keywordflow">else</span> {        <span class="comment">// If endTag, remove any possible attributes:</span>
<a name="l00717"></a>00717                                                                 $tagParts[1]='';
<a name="l00718"></a>00718                                                         }
<a name="l00719"></a>00719 
<a name="l00720"></a>00720                                                                 <span class="comment">// Protecting the tag by converting &lt; and &gt; to &amp;lt; and &amp;gt; ??</span>
<a name="l00721"></a>00721                                                         <span class="keywordflow">if</span> ($tags[$tagName]['protect']) {
<a name="l00722"></a>00722                                                                 $lt = '&amp;lt;';   $gt = '&amp;gt;';
<a name="l00723"></a>00723                                                         } <span class="keywordflow">else</span> {
<a name="l00724"></a>00724                                                                 $lt = <span class="charliteral">'&lt;'</span>;      $gt = <span class="charliteral">'&gt;'</span>;
<a name="l00725"></a>00725                                                         }
<a name="l00726"></a>00726                                                                 <span class="comment">// Remapping tag name?</span>
<a name="l00727"></a>00727                                                         <span class="keywordflow">if</span> ($tags[$tagName]['remap'])   $tagParts[0] = $tags[$tagName]['remap'];
<a name="l00728"></a>00728 
<a name="l00729"></a>00729                                                                 <span class="comment">// rmTagIfNoAttrib</span>
<a name="l00730"></a>00730                                                         <span class="keywordflow">if</span> ($endTag || trim($tagParts[1]) || !$tags[$tagName]['rmTagIfNoAttrib'])       {
<a name="l00731"></a>00731                                                                 $setTag=1;
<a name="l00732"></a>00732 
<a name="l00733"></a>00733                                                                 <span class="keywordflow">if</span> ($tags[$tagName]['nesting']) {
<a name="l00734"></a>00734                                                                         <span class="keywordflow">if</span> (!is_array($tagRegister[$tagName]))  $tagRegister[$tagName]=array();
<a name="l00735"></a>00735 
<a name="l00736"></a>00736                                                                         <span class="keywordflow">if</span> ($endTag)    {
<a name="l00737"></a>00737 <span class="comment">/*                                                                              if ($tags[$tagName]['nesting']=='global')       {</span>
<a name="l00738"></a>00738 <span class="comment">                                                                                        $lastEl = end($tagStack);</span>
<a name="l00739"></a>00739 <span class="comment">                                                                                        $correctTag = !strcmp($tagName,$lastEl);</span>
<a name="l00740"></a>00740 <span class="comment">                                                                                } else $correctTag=1;</span>
<a name="l00741"></a>00741 <span class="comment">        */</span>
<a name="l00742"></a>00742                                                                                 $correctTag=1;
<a name="l00743"></a>00743                                                                                 <span class="keywordflow">if</span> ($tags[$tagName]['nesting']=='global')       {
<a name="l00744"></a>00744                                                                                         $lastEl = end($tagStack);
<a name="l00745"></a>00745                                                                                         <span class="keywordflow">if</span> (strcmp($tagName,$lastEl))   {
<a name="l00746"></a>00746                                                                                                 <span class="keywordflow">if</span> (in_array($tagName,$tagStack))       {
<a name="l00747"></a>00747                                                                                                         <span class="keywordflow">while</span>(count($tagStack) &amp;&amp; strcmp($tagName,$lastEl))     {
<a name="l00748"></a>00748                                                                                                                 $elPos = end($tagRegister[$lastEl]);
<a name="l00749"></a>00749                                                                                                                 unset($newContent[$elPos]);
<a name="l00750"></a>00750 
<a name="l00751"></a>00751                                                                                                                 array_pop($tagRegister[$lastEl]);
<a name="l00752"></a>00752                                                                                                                 array_pop($tagStack);
<a name="l00753"></a>00753                                                                                                                 $lastEl = end($tagStack);
<a name="l00754"></a>00754                                                                                                         }
<a name="l00755"></a>00755                                                                                                 } <span class="keywordflow">else</span> {
<a name="l00756"></a>00756                                                                                                         $correctTag=0;  <span class="comment">// In this case the</span>
<a name="l00757"></a>00757                                                                                                 }
<a name="l00758"></a>00758                                                                                         }
<a name="l00759"></a>00759                                                                                 }
<a name="l00760"></a>00760                                                                                 <span class="keywordflow">if</span> (!count($tagRegister[$tagName]) || !$correctTag)     {
<a name="l00761"></a>00761                                                                                         $setTag=0;
<a name="l00762"></a>00762                                                                                 } <span class="keywordflow">else</span> {
<a name="l00763"></a>00763                                                                                         array_pop($tagRegister[$tagName]);
<a name="l00764"></a>00764                                                                                         <span class="keywordflow">if</span> ($tags[$tagName]['nesting']=='global')       {array_pop($tagStack);}
<a name="l00765"></a>00765                                                                                 }
<a name="l00766"></a>00766                                                                         } <span class="keywordflow">else</span> {
<a name="l00767"></a>00767                                                                                 array_push($tagRegister[$tagName],$c);
<a name="l00768"></a>00768                                                                                 <span class="keywordflow">if</span> ($tags[$tagName]['nesting']=='global')       {array_push($tagStack,$tagName);}
<a name="l00769"></a>00769                                                                         }
<a name="l00770"></a>00770                                                                 }
<a name="l00771"></a>00771 
<a name="l00772"></a>00772                                                                 <span class="keywordflow">if</span> ($setTag)    {
<a name="l00773"></a>00773                                                                                 <span class="comment">// Setting the tag</span>
<a name="l00774"></a>00774                                                                         $newContent[$c++]=$this-&gt;processTag($lt.($endTag?<span class="charliteral">'/'</span>:'').trim($tagParts[0].<span class="charliteral">' '</span>.$tagParts[1]).$gt,$addConfig,$endTag,$lt=='&amp;lt;');
<a name="l00775"></a>00775                                                                 }
<a name="l00776"></a>00776                                                         }
<a name="l00777"></a>00777                                                 } <span class="keywordflow">else</span> {
<a name="l00778"></a>00778                                                         $newContent[$c++]=$this-&gt;processTag(<span class="charliteral">'&lt;'</span>.($endTag?<span class="charliteral">'/'</span>:'').$tagContent.<span class="charliteral">'&gt;'</span>,$addConfig,$endTag);
<a name="l00779"></a>00779                                                 }
<a name="l00780"></a>00780                                         } elseif ($keepAll) {   <span class="comment">// This is if the tag was not defined in the array for processing:</span>
<a name="l00781"></a>00781                                                 <span class="keywordflow">if</span> (!strcmp($keepAll,'protect'))        {
<a name="l00782"></a>00782                                                         $lt = '&amp;lt;';   $gt = '&amp;gt;';
<a name="l00783"></a>00783                                                 } <span class="keywordflow">else</span> {
<a name="l00784"></a>00784                                                         $lt = <span class="charliteral">'&lt;'</span>;      $gt = <span class="charliteral">'&gt;'</span>;
<a name="l00785"></a>00785                                                 }
<a name="l00786"></a>00786                                                 $newContent[$c++]=$this-&gt;processTag($lt.($endTag?<span class="charliteral">'/'</span>:'').$tagContent.$gt,$addConfig,$endTag,$lt=='&amp;lt;');
<a name="l00787"></a>00787                                         }
<a name="l00788"></a>00788                                         $newContent[$c++]=$this-&gt;processContent(substr($tok,$tagEnd+1),$hSC,$addConfig);
<a name="l00789"></a>00789                                 } <span class="keywordflow">else</span> {
<a name="l00790"></a>00790                                         $newContent[$c++]=$this-&gt;processContent(<span class="charliteral">'&lt;'</span>.$tok,$hSC,$addConfig);      <span class="comment">// There were not end-bracket, so no tag...</span>
<a name="l00791"></a>00791                                 }
<a name="l00792"></a>00792                         } <span class="keywordflow">else</span> {
<a name="l00793"></a>00793                                 $newContent[$c++]=$this-&gt;processContent(<span class="charliteral">'&lt;'</span>.$tok,$hSC,$addConfig);      <span class="comment">// It was not a tag anyways</span>
<a name="l00794"></a>00794                         }
<a name="l00795"></a>00795                 }
<a name="l00796"></a>00796 
<a name="l00797"></a>00797                         <span class="comment">// Unsetting tags:</span>
<a name="l00798"></a>00798                 foreach ($tagRegister as $tag =&gt; $positions)    {
<a name="l00799"></a>00799                         foreach ($positions as $pKey)   {
<a name="l00800"></a>00800                                 unset($newContent[$pKey]);
<a name="l00801"></a>00801                         }
<a name="l00802"></a>00802                 }
<a name="l00803"></a>00803 
<a name="l00804"></a>00804                 <span class="keywordflow">return</span> implode('',$newContent);
<a name="l00805"></a>00805         }
<a name="l00806"></a>00806 
<a name="l00814"></a>00814         function bidir_htmlspecialchars($value,$dir)    {
<a name="l00815"></a>00815                 <span class="keywordflow">if</span> ($dir==1)    {
<a name="l00816"></a>00816                         $value = htmlspecialchars($value);
<a name="l00817"></a>00817                 } elseif ($dir==2)      {
<a name="l00818"></a>00818                         $value = <a class="code" href="classt3lib__div.html#6f22285e9535ceb6f91b8d528e2a2d09">t3lib_div::deHSCentities</a>(htmlspecialchars($value));
<a name="l00819"></a>00819                 } elseif ($dir==-1) {
<a name="l00820"></a>00820                         $value = str_replace('&amp;gt;<span class="charliteral">','</span>&gt;',$value);
<a name="l00821"></a>00821                         $value = str_replace('&amp;lt;<span class="charliteral">','</span>&lt;',$value);
<a name="l00822"></a>00822                         $value = str_replace('&amp;quot;<span class="charliteral">','</span><span class="stringliteral">"',$value);</span>
<a name="l00823"></a>00823 <span class="stringliteral">                        $value = str_replace('&amp;amp;','&amp;',$value);</span>
<a name="l00824"></a>00824 <span class="stringliteral">                }</span>
<a name="l00825"></a>00825 <span class="stringliteral">                return $value;</span>
<a name="l00826"></a>00826 <span class="stringliteral">        }</span>
<a name="l00827"></a>00827 <span class="stringliteral"></span>
<a name="l00837"></a>00837 <span class="stringliteral">        function prefixResourcePath($main_prefix,$content,$alternatives=array(),$suffix='')     {</span>
<a name="l00838"></a>00838 <span class="stringliteral"></span>
<a name="l00839"></a>00839 <span class="stringliteral">                $parts = $this-&gt;splitTags('embed,td,table,body,img,input,form,link,script,a',$content);</span>
<a name="l00840"></a>00840 <span class="stringliteral">                foreach ($parts as $k =&gt; $v)    {</span>
<a name="l00841"></a>00841 <span class="stringliteral">                        if ($k%2)       {</span>
<a name="l00842"></a>00842 <span class="stringliteral">                                $params = $this-&gt;get_tag_attributes($v,1);</span>
<a name="l00843"></a>00843 <span class="stringliteral">                                $tagEnd = substr($v,-2)=='/&gt;' ? ' /&gt;' : '&gt;';    // Detect tag-ending so that it is re-applied correctly.</span>
<a name="l00844"></a>00844 <span class="stringliteral">                                $firstTagName = $this-&gt;getFirstTagName($v);     // The 'name' of the first tag</span>
<a name="l00845"></a>00845 <span class="stringliteral">                                $somethingDone=0;</span>
<a name="l00846"></a>00846 <span class="stringliteral">                                $prefix = isset($alternatives[strtoupper($firstTagName)]) ? $alternatives[strtoupper($firstTagName)] : $main_prefix;</span>
<a name="l00847"></a>00847 <span class="stringliteral">                                switch(strtolower($firstTagName))       {</span>
<a name="l00848"></a>00848 <span class="stringliteral">                                                // background - attribute:</span>
<a name="l00849"></a>00849 <span class="stringliteral">                                        case 'td':</span>
<a name="l00850"></a>00850 <span class="stringliteral">                                        case 'body':</span>
<a name="l00851"></a>00851 <span class="stringliteral">                                        case 'table':</span>
<a name="l00852"></a>00852 <span class="stringliteral">                                                $src = $params[0]['background'];</span>
<a name="l00853"></a>00853 <span class="stringliteral">                                                if ($src)       {</span>
<a name="l00854"></a>00854 <span class="stringliteral">                                                        $params[0]['background'] = $this-&gt;prefixRelPath($prefix,$params[0]['background'],$suffix);</span>
<a name="l00855"></a>00855 <span class="stringliteral">                                                        $somethingDone=1;</span>
<a name="l00856"></a>00856 <span class="stringliteral">                                                }</span>
<a name="l00857"></a>00857 <span class="stringliteral">                                        break;</span>
<a name="l00858"></a>00858 <span class="stringliteral">                                                // src attribute</span>
<a name="l00859"></a>00859 <span class="stringliteral">                                        case 'img':</span>
<a name="l00860"></a>00860 <span class="stringliteral">                                        case 'input':</span>
<a name="l00861"></a>00861 <span class="stringliteral">                                        case 'script':</span>
<a name="l00862"></a>00862 <span class="stringliteral">                                        case 'embed':</span>
<a name="l00863"></a>00863 <span class="stringliteral">                                                $src = $params[0]['src'];</span>
<a name="l00864"></a>00864 <span class="stringliteral">                                                if ($src)       {</span>
<a name="l00865"></a>00865 <span class="stringliteral">                                                        $params[0]['src'] = $this-&gt;prefixRelPath($prefix,$params[0]['src'],$suffix);</span>
<a name="l00866"></a>00866 <span class="stringliteral">                                                        $somethingDone=1;</span>
<a name="l00867"></a>00867 <span class="stringliteral">                                                }</span>
<a name="l00868"></a>00868 <span class="stringliteral">                                        break;</span>
<a name="l00869"></a>00869 <span class="stringliteral">                                        case 'link':</span>
<a name="l00870"></a>00870 <span class="stringliteral">                                        case 'a':</span>
<a name="l00871"></a>00871 <span class="stringliteral">                                                $src = $params[0]['href'];</span>
<a name="l00872"></a>00872 <span class="stringliteral">                                                if ($src)       {</span>
<a name="l00873"></a>00873 <span class="stringliteral">                                                        $params[0]['href'] = $this-&gt;prefixRelPath($prefix,$params[0]['href'],$suffix);</span>
<a name="l00874"></a>00874 <span class="stringliteral">                                                        $somethingDone=1;</span>
<a name="l00875"></a>00875 <span class="stringliteral">                                                }</span>
<a name="l00876"></a>00876 <span class="stringliteral">                                        break;</span>
<a name="l00877"></a>00877 <span class="stringliteral">                                                // action attribute</span>
<a name="l00878"></a>00878 <span class="stringliteral">                                        case 'form':</span>
<a name="l00879"></a>00879 <span class="stringliteral">                                                $src = $params[0]['action'];</span>
<a name="l00880"></a>00880 <span class="stringliteral">                                                if ($src)       {</span>
<a name="l00881"></a>00881 <span class="stringliteral">                                                        $params[0]['action'] = $this-&gt;prefixRelPath($prefix,$params[0]['action'],$suffix);</span>
<a name="l00882"></a>00882 <span class="stringliteral">                                                        $somethingDone=1;</span>
<a name="l00883"></a>00883 <span class="stringliteral">                                                }</span>
<a name="l00884"></a>00884 <span class="stringliteral">                                        break;</span>
<a name="l00885"></a>00885 <span class="stringliteral">                                }</span>
<a name="l00886"></a>00886 <span class="stringliteral">                                if ($somethingDone)     {</span>
<a name="l00887"></a>00887 <span class="stringliteral">                                        $tagParts = preg_split('/\s+/s',$v,2);</span>
<a name="l00888"></a>00888 <span class="stringliteral">                                        $tagParts[1]=$this-&gt;compileTagAttribs($params[0],$params[1]);</span>
<a name="l00889"></a>00889 <span class="stringliteral">                                        $parts[$k] = '&lt;'.trim(strtolower($firstTagName).' '.$tagParts[1]).$tagEnd;</span>
<a name="l00890"></a>00890 <span class="stringliteral">                                }</span>
<a name="l00891"></a>00891 <span class="stringliteral">                        }</span>
<a name="l00892"></a>00892 <span class="stringliteral">                }</span>
<a name="l00893"></a>00893 <span class="stringliteral">                $content = implode('',$parts);</span>
<a name="l00894"></a>00894 <span class="stringliteral"></span>
<a name="l00895"></a>00895 <span class="stringliteral">                        // Fix &lt;style&gt; section:</span>
<a name="l00896"></a>00896 <span class="stringliteral">                $prefix = isset($alternatives['style']) ? $alternatives['style'] : $main_prefix;</span>
<a name="l00897"></a>00897 <span class="stringliteral">                if (strlen($prefix))    {</span>
<a name="l00898"></a>00898 <span class="stringliteral">                        $parts = $this-&gt;splitIntoBlock('style',$content);</span>
<a name="l00899"></a>00899 <span class="stringliteral">                        foreach($parts as $k =&gt; $v)     {</span>
<a name="l00900"></a>00900 <span class="stringliteral">                                if ($k%2)       {</span>
<a name="l00901"></a>00901 <span class="stringliteral">                                        $parts[$k] = eregi_replace('(url[[:space:]]*\([[:space:]]*["</span>\']?)([^<span class="stringliteral">"\')]*)(["</span>\']?[[:space:]]*\))<span class="charliteral">','</span>\1'.$prefix.<span class="charliteral">'\2'</span>.$suffix.<span class="charliteral">'\3'</span>,$parts[$k]);
<a name="l00902"></a>00902                                 }
<a name="l00903"></a>00903                         }
<a name="l00904"></a>00904                         $content = implode('',$parts);
<a name="l00905"></a>00905                 }
<a name="l00906"></a>00906 
<a name="l00907"></a>00907                 <span class="keywordflow">return</span> $content;
<a name="l00908"></a>00908         }
<a name="l00909"></a>00909 
<a name="l00919"></a>00919         function prefixRelPath($prefix,$srcVal,$suffix='')      {
<a name="l00920"></a>00920                 $pU = parse_url($srcVal);
<a name="l00921"></a>00921                 <span class="keywordflow">if</span> (!$pU['scheme'] &amp;&amp; substr($srcVal, 0, 1)!=<span class="charliteral">'/'</span>)       { <span class="comment">// If not an absolute URL.</span>
<a name="l00922"></a>00922                         $srcVal = $prefix.$srcVal.$suffix;
<a name="l00923"></a>00923                 }
<a name="l00924"></a>00924                 <span class="keywordflow">return</span> $srcVal;
<a name="l00925"></a>00925         }
<a name="l00926"></a>00926 
<a name="l00937"></a>00937         function cleanFontTags($value,$keepFace=0,$keepSize=0,$keepColor=0)     {
<a name="l00938"></a>00938                 $fontSplit = $this-&gt;splitIntoBlock('font',$value);      <span class="comment">// ,1 ?? - could probably be more stable if splitTags() was used since this depends on end-tags being properly set!</span>
<a name="l00939"></a>00939                 foreach ($fontSplit as $k =&gt; $v)        {
<a name="l00940"></a>00940                         <span class="keywordflow">if</span> ($k%2)       {       <span class="comment">// font:</span>
<a name="l00941"></a>00941                                 $attribArray=$this-&gt;get_tag_attributes_classic($this-&gt;getFirstTag($v));
<a name="l00942"></a>00942                                 $newAttribs=array();
<a name="l00943"></a>00943                                 <span class="keywordflow">if</span> ($keepFace &amp;&amp; $attribArray['face'])  $newAttribs[]='face=<span class="stringliteral">"'.$attribArray['face'].'"</span>';
<a name="l00944"></a>00944                                 <span class="keywordflow">if</span> ($keepSize &amp;&amp; $attribArray['size'])  $newAttribs[]='size=<span class="stringliteral">"'.$attribArray['size'].'"</span>';
<a name="l00945"></a>00945                                 <span class="keywordflow">if</span> ($keepColor &amp;&amp; $attribArray['color'])        $newAttribs[]='color=<span class="stringliteral">"'.$attribArray['color'].'"</span>';
<a name="l00946"></a>00946 
<a name="l00947"></a>00947                                 $innerContent = $this-&gt;cleanFontTags($this-&gt;removeFirstAndLastTag($v),$keepFace,$keepSize,$keepColor);
<a name="l00948"></a>00948                                 <span class="keywordflow">if</span> (count($newAttribs)) {
<a name="l00949"></a>00949                                         $fontSplit[$k]='&lt;font '.implode(<span class="charliteral">' '</span>,$newAttribs).<span class="charliteral">'&gt;'</span>.$innerContent.'&lt;/font&gt;';
<a name="l00950"></a>00950                                 } <span class="keywordflow">else</span> {
<a name="l00951"></a>00951                                         $fontSplit[$k]=$innerContent;
<a name="l00952"></a>00952                                 }
<a name="l00953"></a>00953                         }
<a name="l00954"></a>00954                 }
<a name="l00955"></a>00955                 <span class="keywordflow">return</span> implode('',$fontSplit);
<a name="l00956"></a>00956         }
<a name="l00957"></a>00957 
<a name="l00967"></a>00967         function mapTags($value,$tags=array(),$ltChar=<span class="charliteral">'&lt;'</span>,$ltChar2=<span class="charliteral">'&lt;'</span>) {
<a name="l00968"></a>00968 
<a name="l00969"></a>00969                 foreach($tags as $from =&gt; $to)  {
<a name="l00970"></a>00970                         $value = preg_replace(<span class="charliteral">'/'</span>.preg_quote($ltChar).'(\/)?'.$from.'\s([^\&gt;])*(\/)?\&gt;/', $ltChar2.'$1'.$to.' $2$3&gt;', $value);
<a name="l00971"></a>00971                 }
<a name="l00972"></a>00972                 <span class="keywordflow">return</span> $value;
<a name="l00973"></a>00973         }
<a name="l00974"></a>00974 
<a name="l00982"></a>00982         function unprotectTags($content,$tagList='')    {
<a name="l00983"></a>00983                 $tagsArray = <a class="code" href="classt3lib__div.html#cfb87d585b85e9b32841bde40beaa96c">t3lib_div::trimExplode</a>(<span class="charliteral">','</span>,$tagList,1);
<a name="l00984"></a>00984                 $contentParts = explode('&amp;lt;',$content);
<a name="l00985"></a>00985                 next($contentParts);    <span class="comment">// bypass the first</span>
<a name="l00986"></a>00986                 <span class="keywordflow">while</span>(list($k,$tok)=each($contentParts))        {
<a name="l00987"></a>00987                         $firstChar = substr($tok,0,1);
<a name="l00988"></a>00988                         <span class="keywordflow">if</span> (strcmp(trim($firstChar),''))        {
<a name="l00989"></a>00989                                 $subparts = explode('&amp;gt;',$tok,2);
<a name="l00990"></a>00990                                 $tagEnd = strlen($subparts[0]);
<a name="l00991"></a>00991                                 <span class="keywordflow">if</span> (strlen($tok)!=$tagEnd)      {
<a name="l00992"></a>00992                                         $endTag = $firstChar==<span class="charliteral">'/'</span> ? 1 : 0;
<a name="l00993"></a>00993                                         $tagContent = substr($tok,$endTag,$tagEnd-$endTag);
<a name="l00994"></a>00994                                         $tagParts = preg_split('/\s+/s',$tagContent,2);
<a name="l00995"></a>00995                                         $tagName = strtolower($tagParts[0]);
<a name="l00996"></a>00996                                         <span class="keywordflow">if</span> (!strcmp($tagList,'') || in_array($tagName,$tagsArray))      {
<a name="l00997"></a>00997                                                 $contentParts[$k] = <span class="charliteral">'&lt;'</span>.$subparts[0].<span class="charliteral">'&gt;'</span>.$subparts[1];
<a name="l00998"></a>00998                                         } <span class="keywordflow">else</span> $contentParts[$k] = '&amp;lt;'.$tok;
<a name="l00999"></a>00999                                 } <span class="keywordflow">else</span> $contentParts[$k] = '&amp;lt;'.$tok;
<a name="l01000"></a>01000                         } <span class="keywordflow">else</span> $contentParts[$k] = '&amp;lt;'.$tok;
<a name="l01001"></a>01001                 }
<a name="l01002"></a>01002 
<a name="l01003"></a>01003                 <span class="keywordflow">return</span> implode('',$contentParts);
<a name="l01004"></a>01004         }
<a name="l01005"></a>01005 
<a name="l01015"></a>01015         function stripTagsExcept($value,$tagList)       {
<a name="l01016"></a>01016                 $tags=<a class="code" href="classt3lib__div.html#cfb87d585b85e9b32841bde40beaa96c">t3lib_div::trimExplode</a>(<span class="charliteral">','</span>,$tagList,1);
<a name="l01017"></a>01017                 $forthArr=array();
<a name="l01018"></a>01018                 $backArr=array();
<a name="l01019"></a>01019                 foreach ($tags as $theTag)      {
<a name="l01020"></a>01020                         $forthArr[$theTag]=md5($theTag);
<a name="l01021"></a>01021                         $backArr[md5($theTag)]=$theTag;
<a name="l01022"></a>01022                 }
<a name="l01023"></a>01023                 $value = $this-&gt;mapTags($value,$forthArr,<span class="charliteral">'&lt;'</span>,<span class="charliteral">'_'</span>);
<a name="l01024"></a>01024                 $value=strip_tags($value);
<a name="l01025"></a>01025                 $value = $this-&gt;mapTags($value,$backArr,<span class="charliteral">'_'</span>,<span class="charliteral">'&lt;'</span>);
<a name="l01026"></a>01026                 <span class="keywordflow">return</span> $value;
<a name="l01027"></a>01027         }
<a name="l01028"></a>01028 
<a name="l01038"></a>01038         function caseShift($str,$flag,$cacheKey='')     {
<a name="l01039"></a>01039                 $cacheKey .= $flag?1:0;
<a name="l01040"></a>01040                 <span class="keywordflow">if</span> (is_array($str))     {
<a name="l01041"></a>01041                         <span class="keywordflow">if</span> (!$cacheKey || !isset($this-&gt;caseShift_cache[$cacheKey]))    {
<a name="l01042"></a>01042                                 reset($str);
<a name="l01043"></a>01043                                 foreach ($str as $k =&gt; $v)      {
<a name="l01044"></a>01044                                         <span class="keywordflow">if</span> (!$flag)     {
<a name="l01045"></a>01045                                                 $str[$k] = strtoupper($v);
<a name="l01046"></a>01046                                         }
<a name="l01047"></a>01047                                 }
<a name="l01048"></a>01048                                 <span class="keywordflow">if</span> ($cacheKey)  $this-&gt;caseShift_cache[$cacheKey]=$str;
<a name="l01049"></a>01049                         } <span class="keywordflow">else</span> {
<a name="l01050"></a>01050                                 $str = $this-&gt;caseShift_cache[$cacheKey];
<a name="l01051"></a>01051                         }
<a name="l01052"></a>01052                 } elseif (!$flag)       { $str = strtoupper($str); }
<a name="l01053"></a>01053                 <span class="keywordflow">return</span> $str;
<a name="l01054"></a>01054         }
<a name="l01055"></a>01055 
<a name="l01065"></a>01065         function compileTagAttribs($tagAttrib,$meta=array(), $xhtmlClean=0)     {
<a name="l01066"></a>01066                 $accu=array();
<a name="l01067"></a>01067                 foreach ($tagAttrib as $k =&gt;$v) {
<a name="l01068"></a>01068                         <span class="keywordflow">if</span> ($xhtmlClean)        {
<a name="l01069"></a>01069                                 $attr=strtolower($k);
<a name="l01070"></a>01070                                 <span class="keywordflow">if</span> (strcmp($v,'') || isset($meta[$k]['dashType']))      {
<a name="l01071"></a>01071                                         $attr.='=<span class="stringliteral">"'.htmlspecialchars($v).'"</span>';
<a name="l01072"></a>01072                                 }
<a name="l01073"></a>01073                         } <span class="keywordflow">else</span> {
<a name="l01074"></a>01074                                 $attr=$meta[$k]['origTag']?$meta[$k]['origTag']:$k;
<a name="l01075"></a>01075                                 <span class="keywordflow">if</span> (strcmp($v,'') || isset($meta[$k]['dashType']))      {
<a name="l01076"></a>01076                                         $dash=$meta[$k]['dashType']?$meta[$k]['dashType']:(<a class="code" href="classt3lib__div.html#66f511b7e73eb4721804108f79e45fcb">t3lib_div::testInt</a>($v)?'<span class="charliteral">':'</span><span class="stringliteral">"');</span>
<a name="l01077"></a>01077 <span class="stringliteral">                                        $attr.='='.$dash.$v.$dash;</span>
<a name="l01078"></a>01078 <span class="stringliteral">                                }</span>
<a name="l01079"></a>01079 <span class="stringliteral">                        }</span>
<a name="l01080"></a>01080 <span class="stringliteral">                        $accu[]=$attr;</span>
<a name="l01081"></a>01081 <span class="stringliteral">                }</span>
<a name="l01082"></a>01082 <span class="stringliteral">                return implode(' ',$accu);</span>
<a name="l01083"></a>01083 <span class="stringliteral">        }</span>
<a name="l01084"></a>01084 <span class="stringliteral"></span>
<a name="l01093"></a>01093 <span class="stringliteral">        function get_tag_attributes_classic($tag,$deHSC=0)      {</span>
<a name="l01094"></a>01094 <span class="stringliteral">                $attr=$this-&gt;get_tag_attributes($tag,$deHSC);</span>
<a name="l01095"></a>01095 <span class="stringliteral">                return is_array($attr[0])?$attr[0]:array();</span>
<a name="l01096"></a>01096 <span class="stringliteral">        }</span>
<a name="l01097"></a>01097 <span class="stringliteral"></span>
<a name="l01106"></a>01106 <span class="stringliteral">        function indentLines($content, $number=1, $indentChar="</span>\t<span class="stringliteral">")     {</span>
<a name="l01107"></a>01107 <span class="stringliteral">                $preTab = str_pad('', $number*strlen($indentChar), $indentChar);</span>
<a name="l01108"></a>01108 <span class="stringliteral">                $lines = explode(chr(10),str_replace(chr(13),'',$content));</span>
<a name="l01109"></a>01109 <span class="stringliteral">                foreach ($lines as $k =&gt; $v)    {</span>
<a name="l01110"></a>01110 <span class="stringliteral">                        $lines[$k] = $preTab.$v;</span>
<a name="l01111"></a>01111 <span class="stringliteral">                }</span>
<a name="l01112"></a>01112 <span class="stringliteral">                return implode(chr(10), $lines);</span>
<a name="l01113"></a>01113 <span class="stringliteral">        }</span>
<a name="l01114"></a>01114 <span class="stringliteral"></span>
<a name="l01123"></a>01123 <span class="stringliteral">        function HTMLparserConfig($TSconfig,$keepTags=array())  {</span>
<a name="l01124"></a>01124 <span class="stringliteral">                        // Allow tags (base list, merged with incoming array)</span>
<a name="l01125"></a>01125 <span class="stringliteral">                $alTags = array_flip(t3lib_div::trimExplode(',',strtolower($TSconfig['allowTags']),1));</span>
<a name="l01126"></a>01126 <span class="stringliteral">                $keepTags = array_merge($alTags,$keepTags);</span>
<a name="l01127"></a>01127 <span class="stringliteral"></span>
<a name="l01128"></a>01128 <span class="stringliteral">                        // Set config properties.</span>
<a name="l01129"></a>01129 <span class="stringliteral">                if (is_array($TSconfig['tags.']))       {</span>
<a name="l01130"></a>01130 <span class="stringliteral">                        reset($TSconfig['tags.']);</span>
<a name="l01131"></a>01131 <span class="stringliteral">                        while(list($key,$tagC)=each($TSconfig['tags.']))        {</span>
<a name="l01132"></a>01132 <span class="stringliteral">                                if (!is_array($tagC) &amp;&amp; $key==strtolower($key)) {</span>
<a name="l01133"></a>01133 <span class="stringliteral">                                        if (!strcmp($tagC,'0')) unset($keepTags[$key]);</span>
<a name="l01134"></a>01134 <span class="stringliteral">                                        if (!strcmp($tagC,'1') &amp;&amp; !isset($keepTags[$key]))      $keepTags[$key]=1;</span>
<a name="l01135"></a>01135 <span class="stringliteral">                                }</span>
<a name="l01136"></a>01136 <span class="stringliteral">                        }</span>
<a name="l01137"></a>01137 <span class="stringliteral"></span>
<a name="l01138"></a>01138 <span class="stringliteral">                        reset($TSconfig['tags.']);</span>
<a name="l01139"></a>01139 <span class="stringliteral">                        foreach ($TSconfig['tags.'] as $key =&gt; $tagC)   {</span>
<a name="l01140"></a>01140 <span class="stringliteral">                                if (is_array($tagC) &amp;&amp; $key==strtolower($key))  {</span>
<a name="l01141"></a>01141 <span class="stringliteral">                                        $key=substr($key,0,-1);</span>
<a name="l01142"></a>01142 <span class="stringliteral">                                        if (!is_array($keepTags[$key])) $keepTags[$key]=array();</span>
<a name="l01143"></a>01143 <span class="stringliteral">                                        if (is_array($tagC['fixAttrib.']))      {</span>
<a name="l01144"></a>01144 <span class="stringliteral">                                                reset($tagC['fixAttrib.']);</span>
<a name="l01145"></a>01145 <span class="stringliteral">                                                while(list($atName,$atConfig)=each($tagC['fixAttrib.']))        {</span>
<a name="l01146"></a>01146 <span class="stringliteral">                                                        if (is_array($atConfig))        {</span>
<a name="l01147"></a>01147 <span class="stringliteral">                                                                $atName=substr($atName,0,-1);</span>
<a name="l01148"></a>01148 <span class="stringliteral">                                                                if (!is_array($keepTags[$key]['fixAttrib'][$atName]))   {</span>
<a name="l01149"></a>01149 <span class="stringliteral">                                                                        $keepTags[$key]['fixAttrib'][$atName]=array();</span>
<a name="l01150"></a>01150 <span class="stringliteral">                                                                }</span>
<a name="l01151"></a>01151 <span class="stringliteral">                                                                $keepTags[$key]['fixAttrib'][$atName] = array_merge($keepTags[$key]['fixAttrib'][$atName],$atConfig);           // Candidate for t3lib_div::array_merge() if integer-keys will some day make trouble...</span>
<a name="l01152"></a>01152 <span class="stringliteral">                                                                if (strcmp($keepTags[$key]['fixAttrib'][$atName]['range'],''))  $keepTags[$key]['fixAttrib'][$atName]['range'] = t3lib_div::trimExplode(',',$keepTags[$key]['fixAttrib'][$atName]['range']);</span>
<a name="l01153"></a>01153 <span class="stringliteral">                                                                if (strcmp($keepTags[$key]['fixAttrib'][$atName]['list'],''))   $keepTags[$key]['fixAttrib'][$atName]['list'] = t3lib_div::trimExplode(',',$keepTags[$key]['fixAttrib'][$atName]['list']);</span>
<a name="l01154"></a>01154 <span class="stringliteral">                                                        }</span>
<a name="l01155"></a>01155 <span class="stringliteral">                                                }</span>
<a name="l01156"></a>01156 <span class="stringliteral">                                        }</span>
<a name="l01157"></a>01157 <span class="stringliteral">                                        unset($tagC['fixAttrib.']);</span>
<a name="l01158"></a>01158 <span class="stringliteral">                                        unset($tagC['fixAttrib']);</span>
<a name="l01159"></a>01159 <span class="stringliteral">                                        $keepTags[$key] = array_merge($keepTags[$key],$tagC);                   // Candidate for t3lib_div::array_merge() if integer-keys will some day make trouble...</span>
<a name="l01160"></a>01160 <span class="stringliteral">                                }</span>
<a name="l01161"></a>01161 <span class="stringliteral">                        }</span>
<a name="l01162"></a>01162 <span class="stringliteral">                }</span>
<a name="l01163"></a>01163 <span class="stringliteral">                        // localNesting</span>
<a name="l01164"></a>01164 <span class="stringliteral">                if ($TSconfig['localNesting'])  {</span>
<a name="l01165"></a>01165 <span class="stringliteral">                        $lN = t3lib_div::trimExplode(',',strtolower($TSconfig['localNesting']),1);</span>
<a name="l01166"></a>01166 <span class="stringliteral">                        while(list(,$tn)=each($lN))     {</span>
<a name="l01167"></a>01167 <span class="stringliteral">                                if (isset($keepTags[$tn]))      {</span>
<a name="l01168"></a>01168 <span class="stringliteral">                                        $keepTags[$tn]['nesting']=1;</span>
<a name="l01169"></a>01169 <span class="stringliteral">                                }</span>
<a name="l01170"></a>01170 <span class="stringliteral">                        }</span>
<a name="l01171"></a>01171 <span class="stringliteral">                }</span>
<a name="l01172"></a>01172 <span class="stringliteral">                if ($TSconfig['globalNesting']) {</span>
<a name="l01173"></a>01173 <span class="stringliteral">                        $lN = t3lib_div::trimExplode(',',strtolower($TSconfig['globalNesting']),1);</span>
<a name="l01174"></a>01174 <span class="stringliteral">                        while(list(,$tn)=each($lN))     {</span>
<a name="l01175"></a>01175 <span class="stringliteral">                                if (isset($keepTags[$tn]))      {</span>
<a name="l01176"></a>01176 <span class="stringliteral">                                        if (!is_array($keepTags[$tn]))  $keepTags[$tn]=array();</span>
<a name="l01177"></a>01177 <span class="stringliteral">                                        $keepTags[$tn]['nesting']='global';</span>
<a name="l01178"></a>01178 <span class="stringliteral">                                }</span>
<a name="l01179"></a>01179 <span class="stringliteral">                        }</span>
<a name="l01180"></a>01180 <span class="stringliteral">                }</span>
<a name="l01181"></a>01181 <span class="stringliteral">                if ($TSconfig['rmTagIfNoAttrib'])       {</span>
<a name="l01182"></a>01182 <span class="stringliteral">                        $lN = t3lib_div::trimExplode(',',strtolower($TSconfig['rmTagIfNoAttrib']),1);</span>
<a name="l01183"></a>01183 <span class="stringliteral">                        while(list(,$tn)=each($lN))     {</span>
<a name="l01184"></a>01184 <span class="stringliteral">                                if (isset($keepTags[$tn]))      {</span>
<a name="l01185"></a>01185 <span class="stringliteral">                                        if (!is_array($keepTags[$tn]))  $keepTags[$tn]=array();</span>
<a name="l01186"></a>01186 <span class="stringliteral">                                        $keepTags[$tn]['rmTagIfNoAttrib']=1;</span>
<a name="l01187"></a>01187 <span class="stringliteral">                                }</span>
<a name="l01188"></a>01188 <span class="stringliteral">                        }</span>
<a name="l01189"></a>01189 <span class="stringliteral">                }</span>
<a name="l01190"></a>01190 <span class="stringliteral">                if ($TSconfig['noAttrib'])      {</span>
<a name="l01191"></a>01191 <span class="stringliteral">                        $lN = t3lib_div::trimExplode(',',strtolower($TSconfig['noAttrib']),1);</span>
<a name="l01192"></a>01192 <span class="stringliteral">                        while(list(,$tn)=each($lN))     {</span>
<a name="l01193"></a>01193 <span class="stringliteral">                                if (isset($keepTags[$tn]))      {</span>
<a name="l01194"></a>01194 <span class="stringliteral">                                        if (!is_array($keepTags[$tn]))  $keepTags[$tn]=array();</span>
<a name="l01195"></a>01195 <span class="stringliteral">                                        $keepTags[$tn]['allowedAttribs']=0;</span>
<a name="l01196"></a>01196 <span class="stringliteral">                                }</span>
<a name="l01197"></a>01197 <span class="stringliteral">                        }</span>
<a name="l01198"></a>01198 <span class="stringliteral">                }</span>
<a name="l01199"></a>01199 <span class="stringliteral">                if ($TSconfig['removeTags'])    {</span>
<a name="l01200"></a>01200 <span class="stringliteral">                        $lN = t3lib_div::trimExplode(',',strtolower($TSconfig['removeTags']),1);</span>
<a name="l01201"></a>01201 <span class="stringliteral">                        while(list(,$tn)=each($lN))     {</span>
<a name="l01202"></a>01202 <span class="stringliteral">                                $keepTags[$tn]=array();</span>
<a name="l01203"></a>01203 <span class="stringliteral">                                $keepTags[$tn]['allowedAttribs']=0;</span>
<a name="l01204"></a>01204 <span class="stringliteral">                                $keepTags[$tn]['rmTagIfNoAttrib']=1;</span>
<a name="l01205"></a>01205 <span class="stringliteral">                        }</span>
<a name="l01206"></a>01206 <span class="stringliteral">                }</span>
<a name="l01207"></a>01207 <span class="stringliteral"></span>
<a name="l01208"></a>01208 <span class="stringliteral">                        // Create additional configuration:</span>
<a name="l01209"></a>01209 <span class="stringliteral">                $addConfig=array();</span>
<a name="l01210"></a>01210 <span class="stringliteral">                if ($TSconfig['xhtml_cleaning'])        {</span>
<a name="l01211"></a>01211 <span class="stringliteral">                        $addConfig['xhtml']=1;</span>
<a name="l01212"></a>01212 <span class="stringliteral">                }</span>
<a name="l01213"></a>01213 <span class="stringliteral"></span>
<a name="l01214"></a>01214 <span class="stringliteral">                return array(</span>
<a name="l01215"></a>01215 <span class="stringliteral">                        $keepTags,</span>
<a name="l01216"></a>01216 <span class="stringliteral">                        ''.$TSconfig['keepNonMatchedTags'],</span>
<a name="l01217"></a>01217 <span class="stringliteral">                        intval($TSconfig['htmlSpecialChars']),</span>
<a name="l01218"></a>01218 <span class="stringliteral">                        $addConfig</span>
<a name="l01219"></a>01219 <span class="stringliteral">                );</span>
<a name="l01220"></a>01220 <span class="stringliteral">        }</span>
<a name="l01221"></a>01221 <span class="stringliteral"></span>
<a name="l01247"></a>01247 <span class="stringliteral">        function XHTML_clean($content)  {</span>
<a name="l01248"></a>01248 <span class="stringliteral">                $content = $this-&gt;HTMLcleaner(</span>
<a name="l01249"></a>01249 <span class="stringliteral">                        $content,</span>
<a name="l01250"></a>01250 <span class="stringliteral">                        array(),        // No tags treated specially</span>
<a name="l01251"></a>01251 <span class="stringliteral">                        1,                      // Keep ALL tags.</span>
<a name="l01252"></a>01252 <span class="stringliteral">                        0,                      // All content is htmlspecialchar()'ed (or ??) - if we do, &lt;script&gt; content will break...</span>
<a name="l01253"></a>01253 <span class="stringliteral">                        array('xhtml' =&gt; 1)</span>
<a name="l01254"></a>01254 <span class="stringliteral">                );</span>
<a name="l01255"></a>01255 <span class="stringliteral">                return $content;</span>
<a name="l01256"></a>01256 <span class="stringliteral">        }</span>
<a name="l01257"></a>01257 <span class="stringliteral"></span>
<a name="l01269"></a>01269 <span class="stringliteral">        function processTag($value,$conf,$endTag,$protected=0)  {</span>
<a name="l01270"></a>01270 <span class="stringliteral">                        // Return immediately if protected or no parameters</span>
<a name="l01271"></a>01271 <span class="stringliteral">                if ($protected || !count($conf))        return $value;</span>
<a name="l01272"></a>01272 <span class="stringliteral">                        // OK then, begin processing for XHTML output:</span>
<a name="l01273"></a>01273 <span class="stringliteral">                        // STILL VERY EXPERIMENTAL!!</span>
<a name="l01274"></a>01274 <span class="stringliteral">                if ($conf['xhtml'])     {</span>
<a name="l01275"></a>01275 <span class="stringliteral">                        if ($endTag)    {       // Endtags are just set lowercase right away</span>
<a name="l01276"></a>01276 <span class="stringliteral">                                $value = strtolower($value);</span>
<a name="l01277"></a>01277 <span class="stringliteral">                        } elseif (substr($value,0,4)!='&lt;!--') { // ... and comments are ignored.</span>
<a name="l01278"></a>01278 <span class="stringliteral">                                $inValue = substr($value,1,(substr($value,-2)=='/&gt;'?-2:-1));    // Finding inner value with out &lt; &gt;</span>
<a name="l01279"></a>01279 <span class="stringliteral">                                list($tagName,$tagP)=preg_split('/\s+/s',$inValue,2);   // Separate attributes and tagname</span>
<a name="l01280"></a>01280 <span class="stringliteral">                                $tagName = strtolower($tagName);</span>
<a name="l01281"></a>01281 <span class="stringliteral"></span>
<a name="l01282"></a>01282 <span class="stringliteral">                                        // Process attributes</span>
<a name="l01283"></a>01283 <span class="stringliteral">                                $tagAttrib = $this-&gt;get_tag_attributes($tagP);</span>
<a name="l01284"></a>01284 <span class="stringliteral">                                if (!strcmp($tagName,'img') &amp;&amp; !isset($tagAttrib[0]['alt']))            $tagAttrib[0]['alt']='';        // Set alt attribute for all images (not XHTML though...)</span>
<a name="l01285"></a>01285 <span class="stringliteral">                                if (!strcmp($tagName,'script') &amp;&amp; !isset($tagAttrib[0]['type']))        $tagAttrib[0]['type']='text/javascript';        // Set type attribute for all script-tags</span>
<a name="l01286"></a>01286 <span class="stringliteral">                                $outA=array();</span>
<a name="l01287"></a>01287 <span class="stringliteral">                                reset($tagAttrib[0]);</span>
<a name="l01288"></a>01288 <span class="stringliteral">                                while(list($attrib_name,$attrib_value)=each($tagAttrib[0]))     {</span>
<a name="l01289"></a>01289 <span class="stringliteral">                                                // Set attributes: lowercase, always in quotes, with htmlspecialchars converted.</span>
<a name="l01290"></a>01290 <span class="stringliteral">                                        $outA[]=$attrib_name.'="</span>'.$this-&gt;bidir_htmlspecialchars($attrib_value,2).<span class="charliteral">'"'</span>;
<a name="l01291"></a>01291                                 }
<a name="l01292"></a>01292                                 $newTag=<span class="charliteral">'&lt;'</span>.trim($tagName.<span class="charliteral">' '</span>.implode(<span class="charliteral">' '</span>,$outA));
<a name="l01293"></a>01293                                         <span class="comment">// All tags that are standalone (not wrapping, not having endtags) should be ended with '/&gt;'</span>
<a name="l01294"></a>01294                                 <span class="keywordflow">if</span> (<a class="code" href="classt3lib__div.html#d994a5608365c288d051d6022d4e9976">t3lib_div::inList</a>('img,br,hr,meta,link,base,area,input,param,col',$tagName) || substr($value,-2)=='/&gt;')     {
<a name="l01295"></a>01295                                         $newTag.=' /&gt;';
<a name="l01296"></a>01296                                 } <span class="keywordflow">else</span> {
<a name="l01297"></a>01297                                         $newTag.=<span class="charliteral">'&gt;'</span>;
<a name="l01298"></a>01298                                 }
<a name="l01299"></a>01299                                 $value = $newTag;
<a name="l01300"></a>01300                         }
<a name="l01301"></a>01301                 }
<a name="l01302"></a>01302 
<a name="l01303"></a>01303                 <span class="keywordflow">return</span> $value;
<a name="l01304"></a>01304         }
<a name="l01305"></a>01305 
<a name="l01315"></a>01315         function processContent($value,$dir,$conf)      {
<a name="l01316"></a>01316                 <span class="keywordflow">if</span> ($dir!=0)    $value = $this-&gt;bidir_htmlspecialchars($value,$dir);
<a name="l01317"></a>01317                 <span class="keywordflow">return</span> $value;
<a name="l01318"></a>01318         }
<a name="l01319"></a>01319 }
<a name="l01320"></a>01320 
<a name="l01321"></a>01321 
<a name="l01322"></a>01322 
<a name="l01323"></a>01323 <span class="keywordflow">if</span> (defined('TYPO3_MODE') &amp;&amp; $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/<span class="keyword">class</span>.<a class="code" href="classt3lib__parsehtml.html">t3lib_parsehtml</a>.php']) {
<a name="l01324"></a>01324         include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/<span class="keyword">class</span>.<a class="code" href="classt3lib__parsehtml.html">t3lib_parsehtml</a>.php']);
<a name="l01325"></a>01325 }
<a name="l01326"></a>01326 ?&gt;
</pre></div><?php
  include_once '../doc-typo3-funcs.php';
  get_footer();
?>