Re: note 99643 added to function.strip-tags

From: Date: Sat, 28 Aug 2010 03:12:34 +0000
Subject: Re: note 99643 added to function.strip-tags
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-172127@lists.php.net to get a copy of this message
-- </Daniel P. Brown> Network Infrastructure Manager Documentation, Webmaster Teams http://www.php.net/ ommunity input to the manual? C'mon, you might even get a nifty @php.net email address if you do it right!) On Fri, Aug 27, 2010 at 22:04, <tom@cowin.us> wrote: > (note to ed.: this should overwrite my note from earlier today, contains a couple script fixes) With most web based user input of more than a line of text, it seems I get 90% 'paste from Word'. I've developed this fn over time to try to strip all of this cruft out. A few things I do here are application specific, but if it helps you - great, if you can improve on it or have a better way - please - post it... > >    function strip_word_html($text, $allowed_tags = '<b><i><sup><sub><em><strong><u><br>') >    { >        mb_regex_encoding('UTF-8'); >        //replace MS special characters first >        $search = array('/&lsquo;/u', '/&rsquo;/u', '/&ldquo;/u', '/&rdquo;/u', '/&mdash;/u'); >        $replace = array('\'', '\'', '"', '"', '-'); >        $text = preg_replace($search, $replace, $text); >        //make sure _all_ html entities are converted to the plain ascii equivalents - it appears >        //in some MS headers, some html entities are encoded and some aren't >        $text = html_entity_decode($text, ENT_QUOTES, 'UTF-8'); >        //try to strip out any C style comments first, since these, embedded in html comments, seem to >        //prevent strip_tags from removing html comments (MS Word introduced combination) >        if(mb_stripos($text, '/*') !== FALSE){ >            $text = mb_eregi_replace('#/\*.*?\*/#s', '', $text, 'm'); >        } >        //introduce a space into any arithmetic expressions that could be caught by strip_tags so that they won't be >        //'<1' becomes '< 1'(note: somewhat application specific) >        $text = preg_replace(array('/<([0-9]+)/'), array('< $1'), $text); >        $text = strip_tags($text, $allowed_tags); >        //eliminate extraneous whitespace from start and end of line, or anywhere there are two or more spaces, convert it to one >        $text = preg_replace(array('/^\s\s+/', '/\s\s+$/', '/\s\s+/u'), array('', '', ' '), $text); >        //strip out inline css and simplify style tags >        $search = array('#<(strong|b)[^>]*>(.*?)</(strong|b)>#isu', '#<(em|i)[^>]*>(.*?)</(em|i)>#isu', '#<u[^>]*>(.*?)</u>#isu'); >        $replace = array('<b>$2</b>', '<i>$2</i>', '<u>$1</u>'); >        $text = preg_replace($search, $replace, $text); >        //on some of the ?newer MS Word exports, where you get conditionals of the form 'if gte mso 9', etc., it appears >        //that whatever is in one of the html comments prevents strip_tags from eradicating the html comment that contains >        //some MS Style Definitions - this last bit gets rid of any leftover comments */ >        $num_matches = preg_match_all("/\<!--/u", $text, $matches); >        if($num_matches){ >              $text = preg_replace('/\<!--(.)*--\>/isu', '', $text); >        } >        return $text; >    } > ---- > Server IP: 69.147.83.197 > Probable Submitter: 71.164.23.176 > ---- > Manual Page -- http://www.php.net/manual/en/function.strip-tags.php > Edit        -- https://master.php.net/note/edit/99643 > Del: integrated  -- https://master.php.net/note/delete/99643/integrated > Del: useless     -- https://master.php.net/note/delete/99643/useless > Del: bad code    -- https://master.php.net/note/delete/99643/bad+code > Del: spam        -- https://master.php.net/note/delete/99643/spam > Del: non-english -- https://master.php.net/note/delete/99643/non-english > Del: in docs     -- https://master.php.net/note/delete/99643/in+docs > Del: other reasons-- https://master.php.net/note/delete/99643 > Reject      -- https://master.php.net/note/reject/99643 > Search      -- https://master.php.net/manage/user-notes.php > > > -- > PHP Notes Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > > -- </Daniel P. Brown> Dedicated Servers, Cloud and Cloud Hybrid Solutions, VPS, Hosting (866-) 725-4321 http://www.parasane.net/

« previous php.notes (#172127) next »