Вычистить текст от тегов MS Word

Внезапно случается, что когда текст вносится напрямую из Word в WYSWYG-редактор — получается плохо.

Чтобы не переделывать руками каждую запись через админку, было принято решение переделать все через консоль.

В итоге:

<?

if(!mysql_connect('host', 'user', 'password')){
    die(mysql_error());
}

if(!mysql_select_db('db')){
    die(mysql_error());
}

mysql_query("SET NAMES UTF8");

$tables = array(
                'news'  =>  array(
                                'id'        => 'id',
                                'content'   => 'content_field'
                            ),
                'pages' =>  array(
                                'id'        =>  'page_id',
                                'content'   => 'content_field'
                )
            );

$mask = array('mso', '\"');

foreach($tables as $table=>$data){
    
    foreach($mask as $mask_value){
        echo "Searching ".$mask_value."\n";
        $query = "SELECT COUNT(*) FROM ".$table." WHERE ".$data['content']." LIKE '%".$mask_value."%'";
        $result = mysql_query($query);
        $row = mysql_fetch_row($result);
        echo "\t".$row[0]." from ".$table."\n\n";
        while(true){
            
            $query = "
                    SELECT ".$data['id'].", ".$data['content']."
                    FROM ".$table."
                    WHERE ".$data['content']." LIKE '%mso%' LIMIT 1";
        
            $result = mysql_query($query);
            if($result && mysql_num_rows($result) == 1){
                $row = mysql_fetch_assoc($result);
                echo $row[$data['content']]."\n";
                echo "--------------------\n";
                $true_content = clean($row[$data['content']]);
                echo $true_content;
                echo "\n";
                echo 'Content is correct? [y\N] ';
                $d = trim(fgets(STDIN));
                if($d){
                    $query = "
                            UPDATE ".$table."
                            SET ".$data['content']." = '".mysql_real_escape_string($true_content)."'
                            WHERE ".$data['id']." = ".$row[$data['id']];
                    mysql_query($query);
                }
                continue;
            }
            break;
        }        
    }
}

function clean($content){
    $content = preg_replace("/\r/",'',$content);
    $content = stripslashes($content);
    $content = preg_replace('/<p[^>]+>(.+?)<\/p>/is', "<p>$1</p>", $content);
    $content = preg_replace('/<span[^>]+>(.+?)<\/span>/is', "<span>$1</span>", $content);
    $content = preg_replace('/<!.+?(?:\-\-|\])>/','',$content);
    $content = preg_replace('/<style.+?<\/style>/is','',$content);
    $content = preg_replace('/<xml.+?<\/xml>/is','',$content);
    $content = strip_tags($content,'<span><p><b><i><u><a><img><table><tr><th><td><thead><tbody><br>');
    $content = str_replace(" "," ", $content);
    $content = preg_replace("/<(?:span|p)>\s*<\/(?:span|p)>/is","",$content);
    $content = preg_replace("/\n\n+/","\n",$content);
    return $content;
}
?>

Комментировать

Войдите чтобы оставить комментарий.