, , , and HTML tags and * converts URLs to tags in $sMessage. It returns a string where * useless or wrong tags are htmlentities()'ed. It is rock-solid * because I'm an expert in titanium and adamantium. * * NOTE : it also vonvert < > and & to <, > and &. */ function slipounet( $sMessage, $iLen ) { $sMessage = str_clean( $sMessage, $iLen ); if( $sMessage == null ) { die( 'Invalid message: ' . $sMessage ); } $sMessage = preg_replace( '/<[ ]*(\/?)[ ]*(b|i|s|tt|u)[ ]*>/i', ' <\1\2> ', $sMessage ); $sMessage = str_replace( '<', chr(27) . 'lt' . chr(27), $sMessage ); $sMessage = str_replace( '>', chr(27) . 'gt' . chr(27), $sMessage ); $sMessage = str_replace( '&', chr(27) . 'amp' . chr(27), $sMessage ); $aWords = explode( ' ', $sMessage ); $iMax = count( $aWords ); $aTags = array(); for( $i=0 ; $i<$iMax ; $i++ ) { $sWord = $aWords[$i]; if( preg_match( '/<(b|i|s|tt|u)>/i', $sWord ) ) { $sOpenTag = strtolower( substr( $sWord, 1, strlen($sWord)-2 ) ); array_push( $aTags, $sOpenTag ); $aWords[$i] = strtolower($sWord); continue ; } if( preg_match( '/<\/(b|i|s|tt|u)>/i', $sWord ) ) { $sOpenTag = array_pop( $aTags ); $sCloseTag = strtolower( substr( $sWord, 2, strlen($sWord)-3 ) ); if( $sOpenTag ) { if( $sOpenTag==$sCloseTag ) { $aWords[$i] = strtolower($sWord) ; } else { $aWords[$i] = chr(27) . $sCloseTag . chr(27) ; array_push( $aTags, $sOpenTag ); } } else { $aWords[$i] = chr(27) . $sCloseTag . chr(27) ; } continue ; } if((( strncmp( $sWord, 'http://', 7 ) == 0 )&&( strlen($sWord) > 7 )) ||(( strncmp( $sWord, 'https://', 8 ) == 0 )&&( strlen($sWord) > 8 )) ||(( strncmp( $sWord, 'ftp://', 6 ) == 0 )&&( strlen($sWord) > 6 ))) { $aWords[$i] = '[url]' ; continue ; } $aWords[$i] = htmlspecialchars( $sWord ); } $sMessage = implode( ' ', $aWords ); while( $sTag = array_pop( $aTags ) ) { $sMessage = $sMessage . '' ; } $sMessage = preg_replace( '/ <(\/?)(b|i|s|tt|u)> /i', '<\1\2>', $sMessage ); $sMessage = preg_replace( '/ ' . chr(27) . '(b|i|s|tt|u)' . chr(27) . ' /i', '</\1>', $sMessage ); $sMessage = str_replace( chr(27) . 'lt' . chr(27), '<', $sMessage ); $sMessage = str_replace( chr(27) . 'gt' . chr(27), '>', $sMessage ); $sMessage = str_replace( chr(27) . 'amp' . chr(27), '&', $sMessage ); return $sMessage ; } ?>