PHP-Bibliothek, die Stylesheet mit Inline-Style merge kann

Ich arbeite mit HTML-Dokument, das von Microsoft Word 2007/2010 generiert wurde. Neben der Erzeugung von unglaublich schmutzigem HTML hat Word auch die Tendenz, sowohl Block- als auch Inline-Stil zu verwenden. Ich bin auf der Suche nach einer PHP-Bibliothek würde Block in bereits vorhandene Inline-Stil-Element zusammenführen.

Ich habe html von Word konvertiert und werde sie über XMLRPC senden. Die PHP-Bibliothek muss Stylesheet mit Inline-Stil merge, damit das Format erhalten bleibt. Ich möchte den Aufruf dieser Bibliothek aufrufen, nachdem die Anforderung von XMLRPC empfangen wurde und bevor sie den Kses-Filter erreicht, sodass der Stilblock nicht entfernt wird.

Beispiel

Wenn das ursprüngliche HTML ist:

   .normaltext {color:black;font-weight:normal;font-size:10pt} .important {color:red;font-weight:bold;font-size:11pt}   

Lorem ipsum dolor sit amet, consectetur adipiscing elit. In ut erat id dui mollis faucibus. Mauris eu neque et eros tempus placerat. Nam in purus nisi, vitae dictum ligula. Morbi mattis eros eget diam vulputate imperdiet. Integer a metus eros. Sed iaculis porta imperdiet.

Soll werden:

     

Lorem ipsum dolor sit amet, consectetur adipiscing elit. In ut erat id dui mollis faucibus. Mauris eu neque et eros tempus placerat. Nam in purus nisi, vitae dictum ligula. Morbi mattis eros eget diam vulputate imperdiet. Integer a metus eros. Sed iaculis porta imperdiet.

Tor

Das Endziel besteht darin, den gesamten Stil und die Formatierung einer Word-generierten HTML-Datei beizubehalten und sie an WordPress zu senden, wo sie von TinyMCE bearbeitet werden kann. Wenn es eine Alternative zu dem gibt, was ich beschreibe (muss auf der Server-Seite gemacht werden), möchte ich es auch als Antwort akzeptieren.

Solutions Collecting From Web of "PHP-Bibliothek, die Stylesheet mit Inline-Style merge kann"

Ich versuche, die gleiche Ausgabe zu reproduzieren, die Sie in Ihrem obigen Beispiel angegeben haben, und ich kann nur eine Ausgabe in der Art von erreichen;

 

Red Example text

Wie Sie sehen können, fügt Microsoft Word (2010) vordefinierte classnnamen für die Absatz- und Bereichs-Tags ein und umschließt außerdem den Bereich, der den Text enthält.

Wie konnten Sie dem Bereich, in den der Text eingebettet wird, einen classnnamen zuweisen?

Als Referenz speichere ich meine HTML-Datei als “Webseite, Gefiltert” und Gefiltert, um die “schmutzige” Formatierung zu entfernen, die Word ansonsten auf das Dokument anwenden würde.

Wenn ich dieselbe Ausgabe replizieren kann, die Sie oben in Ihrem Beispiel erhalten haben, können wir möglicherweise auf eine einfachere Lösung hinarbeiten.

PS. Ich entschuldige mich, dass diese Antwort auf Ihre Frage als Antwort erscheint, aber ich bin scheinbar nicht in der Lage, einen Kommentar zu schreiben. Ich beabsichtige, dies mit einigen zusätzlichen Kommentaren zu verfolgen, die auf eine vollständige Antwort hinarbeiten werden, da ich einige Vorschläge habe, die ich machen möchte, sobald ich einen weiteren Einblick in meine erste Frage habe!

AKTUALISIEREN

HINWEIS: Dies ist als Anleitung gedacht, um Sie hoffentlich auf den richtigen Weg zu bringen, und deshalb sind die unten angegebenen Codes Beispiele, denen einige functionen fehlen, in die Sie schreiben müssen.

Im Idealfall möchten Sie, dass Ihr XML-RPC-Skript die Verarbeitung des Inhalts, in den Sie es einspeisen, auf zwei Arten behandelt.

1) Suchen und ersetzen Sie Inline-Stile zu denen, die mit WordPress über Regular Expression (RegEx) kompatibel sind.

2) Posten Sie Ihre neu sanierten Inhalte in Form eines Posts in Ihrem Blog.

Wenn Sie nicht genau wissen, wie Ihr MS Word-Dokument genau inline formatiert, können Sie mit RegEx Text zwischen den Zeichen suchen und ersetzen, wenn Sie bestimmte Kriterien erfüllen.

Nimm das zum Beispiel;

Integer

Mit RegEx können Sie nach dem Wort “grün” zwischen und > suchen und wo Sie eine Übereinstimmung von "grün" finden, ersetzen Sie den gesamten Text zwischen Ihrem gewünschten Inline-Stil;

Um dieses Inline-Styling auf dem Post-Editor-Bildschirm im WordPress-Dashboard verfügbar zu machen, müssen Sie einige zusätzliche Optionen zum TinyMCE-Editor "styles-dropdown" hinzufügen, die ähnlich aussehen wie;

  array( 'title' => 'Bold Green Text', 'classes' => 'green', 'inline' => 'span', 'styles' => array( 'color' => 'green', 'fontWeight' => 'bold', 'fontSize' => '10pt' ) 

Sie können mehr darüber lesen bei,

1) HIER

2) UND HIER

Im Wesentlichen sollten die benutzerdefinierten Stile, die Sie hinzufügen, denen entsprechen, die Sie über Ihre RegEx-function verfügbar machen.

Nun in Bezug auf Ihr XML-RPC-Skript (Beispiel. Post-via-xmlrpc.php) würde etwas in Richtung aussehen;

 < ?php // Your RegExp function for processing your source file function sanitize_content() { gloabl $content; $content = 'example content is here'; // do your regular expression stuff here return $content; } // Your XML-RPC function function wpPostXMLRPC($title,$content,$rpcurl,$username,$password,$categories=array(1)){ $categories = implode(",", $categories); $XML = "$title"."$categories".$sanitized_content; $params = array('','',$username,$password,$XML,1); $request = xmlrpc_encode_request('blogger.newPost',$params); $ch = curl_init(); curl_setopt($ch, CURLOPT_POSTFIELDS, $request); curl_setopt($ch, CURLOPT_URL, $rpcurl); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 1); curl_exec($ch); curl_close($ch); } // Do stuff here to initiate your post function ?> 

In diesem Beispiel sehen Sie, dass ich die $ content string in das Skript eingefügt habe, aber natürlich möchten Sie Ihre MS Word HTML-Datei stattdessen an diese Variable übergeben, und Sie können dies entweder über ein Formular oder einen Dateipfad tun auf.

Angenommen, Ihr post-via-xmlrpc.php wäre über Ihren lokalen Host erreichbar, würden Sie diesen process ausführen, indem Sie

http: //localhost/post-via-xmlrpc.php

Der schwierigste Teil des gesamten processes ist in Wirklichkeit Ihre reguläre Ausdrucks- (RegEx-) Such- und Ersetzungsfunktion, für die Sie und alles davor entfernen, suchen und alles danach entfernen und dann beide entfernen müssen und und analysieren Sie anschließend den verbleibenden Inhalt, der Inline-Stile ersetzt, wie erforderlich.

Es gibt wirklich keine Notwendigkeit, sich mit einer anderen PHP-Bibliothek herumzuschlagen, wenn dies alles aus einem eigenständigen XML-RPC-Skript heraus geschehen kann, das dafür ausgelegt ist, Ihre Eingaben zu bereinigen.

Auschecken:

Das Portieren von Code aus einer der Quelldateien nach PHP oder das Verwenden einer der verfügbaren APIs sollte den CSS-Stil inline machen.

Wenn Sie damit einverstanden sind, dass Stile nicht mehr in der richtigen Reihenfolge sind, TinyMCE aber nicht töten soll, und Sie wollen dies nur tun, können Sie die Frage direkter angehen.

TinyMCE hat eine valid_children Konfiguration, die es ermöglicht, dass Stile valid_children . Wenn Sie +body[style] hinzufügen, sollten Sie in der Lage sein, Stilblöcke zu durchlaufen.

http://codex.wordpress.org/TinyMCE#Customize_TinyMCE_mit_Filtern

Die Option keep_styles sollte ebenso hilfreich sein wie paste_remove_styles . Überprüfen Sie die Standardeinstellungen hier http://core.trac.wordpress.org/browser/tags/3.3.1/wp-includes//class-wp-editor.php#L271

Sie würden den tiny_mce_before_init Filter tiny_mce_before_init und die Werte ändern.

http://core.trac.wordpress.org/browser/tags/3.3.1/wp-includes//class-wp-editor.php#L396