Re: htmlspecialchars() or htmlentities without destroying tags?

From: Date: Wed, 08 Jan 2003 05:05:40 +0000
Subject: Re: htmlspecialchars() or htmlentities without destroying tags?
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-130696@lists.php.net to get a copy of this message
Hi Justin, You have to specify the list of tags you want preserved in an array, but this function from phpDocumentor will do it: /** * smart htmlentities, doesn't entity the allowed tags list * Since version 1.1, this function uses htmlspecialchars instead of htmlentities, for international support * @param string $s * @return string browser-displayable page */ function adv_htmlentities($s,$html_allowed) { $___htmltemp = array_flip($html_allowed); $___html1 = array(); foreach($___htmltemp as $tag => $trans) { $___html1['<'.$tag.'>'] = htmlentities('<'.$tag.'>'); $___html1['</'.$tag.'>'] = htmlentities('</'.$tag.'>'); } $_html = array_flip($___html1); } $result = htmlspecialchars($s); $entities = array_flip(get_html_translation_table(HTML_SPECIALCHARS)); $result = strtr($result,$_html); $matches = array(); preg_match_all('/(&lt;img.*&gt;)/U',$result,$matches); for($i=0;$i<count($matches[1]);$i++) { $result = str_replace($matches[1][$i],strtr($matches[1][$i],array_flip(get_html_transl ation_table(HTML_SPECIALCHARS))),$result); } preg_match_all('/(&lt;font.*&gt;)/U',$result,$matches); for($i=0;$i<count($matches[1]);$i++) { $result = str_replace($matches[1][$i],strtr($matches[1][$i],array_flip(get_html_transl ation_table(HTML_SPECIALCHARS))),$result); } preg_match_all('/(&lt;ol.*&gt;)/U',$result,$matches); for($i=0;$i<count($matches[1]);$i++) { $result = str_replace($matches[1][$i],strtr($matches[1][$i],array_flip(get_html_transl ation_table(HTML_SPECIALCHARS))),$result); } preg_match_all('/(&lt;ul.*&gt;)/U',$result,$matches); for($i=0;$i<count($matches[1]);$i++) { $result = str_replace($matches[1][$i],strtr($matches[1][$i],array_flip(get_html_transl ation_table(HTML_SPECIALCHARS))),$result); } preg_match_all('/(&lt;li.*&gt;)/U',$result,$matches); for($i=0;$i<count($matches[1]);$i++) { $result = str_replace($matches[1][$i],strtr($matches[1][$i],array_flip(get_html_transl ation_table(HTML_SPECIALCHARS))),$result); } preg_match_all('/(&lt;a .*&gt;)/U',$result,$matches); for($i=0;$i<count($matches[1]);$i++) { $result = str_replace($matches[1][$i],strtr($matches[1][$i],array_flip(get_html_transl ation_table(HTML_SPECIALCHARS))),$result); } return $result; } Regards, Greg -- phpDocumentor http://www.phpdoc.org "Justin French" <justin@indent.com.au> wrote in message news:BA41E11F.1BC59%justin@indent.com.au... > Hi all, > > Has anyone got a function or regexp floating around that will convert behave > like htmlspecialchars() or htmlentities() (eg converting & to &amp;, " to > &quote;, etc etc) BUT NOT DESTROY HTML TAGS? > > Eg: > > "hello" said <a href="fred.php">Fred</a> & Judy > > should become: > > &quot;hello&quot; said <a href="fred.php">Fred &amp; Judy > > NOT: > &quot;hello&quot; said &lt;a href=&quot;fred.php&quot;&gt;Fred > &amp; Judy > > ???? > > I guess it's stripped down or limited version of htmlspecialchars() or > htmlentities(). > > > Justin >

« previous php.general (#130696) next »