Re: note 99643 added to function.strip-tags
| From: | Daniel Brown | 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('/‘/u', '/’/u',
'/“/u', '/”/u', '/—/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/