Вычистить текст от тегов 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;
}
?>