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('/(<img.*>)/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('/(<font.*>)/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('/(<ol.*>)/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('/(<ul.*>)/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('/(<li.*>)/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('/(<a .*>)/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" <[EMAIL PROTECTED]> wrote in message [EMAIL PROTECTED]">news:[EMAIL PROTECTED]... > Hi all, > > Has anyone got a function or regexp floating around that will convert behave > like htmlspecialchars() or htmlentities() (eg converting & to &, " to > "e;, etc etc) BUT NOT DESTROY HTML TAGS? > > Eg: > > "hello" said <a href="fred.php">Fred</a> & Judy > > should become: > > "hello" said <a href="fred.php">Fred & Judy > > NOT: > "hello" said <a href="fred.php">Fred & Judy > > ???? > > I guess it's stripped down or limited version of htmlspecialchars() or > htmlentities(). > > > Justin > -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php