PHP去掉从word直接粘贴过来的没有用格式的函数
前端之家收集整理的这篇文章主要介绍了
PHP去掉从word直接粘贴过来的没有用格式的函数,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
一般处理的方式有二种:1.通过编辑器的JS直接去除。2.提交到后台后,直接用程序去掉无效标签。下面我就分享一个通过PHP的处理方式,成功率可能不是100%。这程序也是在PHP官网上看到的,就顺便粘贴过来了。
<div class="codetitle"><a style="CURSOR: pointer" data="93041" class="copybut" id="copybut93041" onclick="doCopy('code93041')"> 代码如下:
<div class="codebody" id="code93041">
function ClearHtml($content,$allowtags='') { mb_regex_encoding('UTF-8');
//replace MS special characters first
$search = array('/‘/u','/’/u','/“/u','/”/u','/—/u');
$replace = array('\'','\'','"','-');
$content = preg_replace($search,$replace,$content);
//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
$content = html_entity_decode($content,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($content,'/
') !== FALSE){
$content = mb_eregi_replace('#/*.?*/#s','',$content,'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)
$content = preg_replace(array('/<([0-9]+)/'),array('< $1'),$content); $content = strip_tags($content,$allowtags);
//eliminate extraneous whitespace from start and end of line,or anywhere there are two or more spaces,convert it to one
$content = preg_replace(array('/^\s\s+/','/\s\s+$/','/\s\s+/u'),array('',' '),$content);
//strip out inline css and simplify style tags
$search = array('#<(h3|b)[^>]
>(.?)</(h3|b)>#isu','#<(em|i)[^>]
>(.?)</(em|i)>#isu','#<u[^>]
>(.?)#isu');
$replace = array('
$2','
$2','
$1');
$content = preg_replace($search,$content); //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",$matches);
if($num_matches){
$content = preg_replace('/\<!--(.)-->/isu',$content);
}
return $content;
}