Como posso filtrar o lixo do Microsoft Word do conteúdo colado?

3

Eu tenho alguns usuários que estão postando em um blog de grupo e são capazes de recortar e colar, mas seus arquivos incluem coisas como:

<!– /* Font Definitions */ @font-face {font-family:”Cambria Math”; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:1; mso-generic-font-family:roman; mso-font-format:other; mso-font-pitch:variable; mso-font-signature:0 0 0 0 0 0;} @font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-520092929 1073786111 9 0 415 0;} @font-face {font-family:”Trebuchet MS”; panose-1:2 11 6 3 2 2 2 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:”"; margin-top:0in; margin-right:0in; margin-bottom:10.0pt; margin-left:0in; line-height:115%; mso-pagination:widow-orphan; font-size:12.0pt; font-family:”Trebuchet MS”,”sans-serif”; mso-fareast-font-family:Calibri; mso-fareast-theme-font:minor-latin; mso-bidi-font-family:”Times New Roman”; mso-bidi-theme-font:minor-bidi; color:black;} p {mso-style-noshow:yes; mso-style-priority:99; mso-margin-top-alt:auto; margin-right:0in; mso-margin-bottom-alt:auto; margin-left:0in; mso-pagination:widow-orphan; font-size:12.0pt; font-family:”Times New Roman”,”serif”; mso-fareast-font-family:”Times New Roman”;} .MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; font-size:12.0pt; mso-ansi-font-size:12.0pt; mso-bidi-font-size:12.0pt; mso-ascii-font-family:”Trebuchet MS”; mso-fareast-font-family:Calibri; mso-fareast-theme-font:minor-latin; mso-hansi-font-family:”Trebuchet MS”; mso-bidi-font-family:”Times New Roman”; mso-bidi-theme-font:minor-bidi; color:black;} .MsoPapDefault {mso-style-type:export-only; margin-bottom:10.0pt; line-height:115%;} @page WordSection1 {size:8.5in 11.0in; margin:1.0in 1.0in 1.0in 1.0in; mso-header-margin:.5in; mso-footer-margin:.5in; mso-paper-source:0;} div.WordSection1 {page:WordSection1;} –>

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:”Table Normal”;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:”";
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin-top:0in;
mso-para-margin-right:0in;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0in;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:”Calibri”,”sans-serif”;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:”Times New Roman”;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:”Times New Roman”;
mso-bidi-theme-font:minor-bidi;}

O que posso fazer para filtrar código assim automaticamente?

    
por artlung 24.08.2010 / 15:08

4 respostas

8

Existe um botão no editor de texto visual incorporado ao WordPress que tira a formatação do Microsoft Word. Está rotulado como "Colar da Palavra"

    
por Chris_O 24.08.2010 / 17:02
5

Sugiro usar o plugin TinyMCE Advanced de Ozh. Ele permite adicionar uma opção "Colar do Word" que cuida de tudo isso para você.

No entanto, se você não estiver interessado, terá mais algumas opções. Assim:

function get_rid_of_mso_junk( $content ){
  return preg_replace( '@(mso|panose)[^:]{1,25}:[^;]+;(\s+)?(\n+)?@i', '', $content );
}

add_filter( 'content_save_pre', 'get_rid_of_mso_junk' );

Continue adicionando declarações indesejáveis ao primeiro conjunto de capturas nesse regex para adicionar linhas que devem ser removidas. Por exemplo: (mso|panose|other-junk|annoyance) .

    
por John P Bloch 24.08.2010 / 15:33
2

Eu trabalhei com clientes que enfrentam muito esse problema. O truque, descobri, é copiar e colar na exibição HTML e, em seguida, voltar para o editor Visual para ajustar a formatação, se necessário.

Isso também é necessário se você copiar e colar de outro website. Às vezes você acidentalmente extrai definições de classe e estilos in-line da fonte externa e isso pode quebrar a exibição se você não tiver as mesmas classes ou estilos configurados ou suportados pelo seu site.

Outra opção seria expor seus usuários ao Windows Live Writer . É um produto da Microsoft completamente grátis, funciona bem com o recurso de copiar e colar do Word e pode interagir com o WordPress: você escreve sua postagem, edita sua postagem, usa o verificador ortográfico integrado e formata a postagem para exibir exatamente como você quer, clique em "Publicar" para enviar sua postagem para o WordPress via XMLRPC. É um sistema bastante sólido que torna incrivelmente fácil ensinar um blogueiro iniciante a blogar ... particularmente porque a interface do usuário é tão semelhante ao Word para começar.

    
por EAMann 24.08.2010 / 16:25
2

Para quem procura uma solução para esse problema, fiz algo assim:

function delete_between($beginning, $end, $string) {
    $beginningPos = strpos($string, $beginning);
    $endPos = strpos($string, $end);
    if (!$beginningPos || !$endPos) {
    return $string;
    }

    $textToDelete = substr($string, $beginningPos, ($endPos + strlen($end)) - $beginningPos);

    return str_replace($textToDelete, '', $string);
}

function clean_content( $content ){
    if( is_home() || is_single()){
        $content = delete_between('<!--[if gte mso', ';}', $content);   
        return $content;
    }else{
    return $content;
}

add_filter( 'the_content', 'clean_content' );
add_filter( 'the_excerpt', 'clean_content' );

Você pode substituir as strings na função delete_between pelo que você quiser. Isso pareceu funcionar para mim embora.

    
por codeprokanner 23.10.2013 / 20:23