2008-12-18 12 views
9

Ich habe eine Website, wo Benutzer Zeug (wie in Foren, Kommentare, etc.) mit einer benutzerdefinierten Implementierung von TinyMCE veröffentlichen können. Viele von ihnen kopieren gerne & einfügen aus Word, was bedeutet, dass ihre Eingabe oft mit einer Fülle von zugeordneten MS-Inline-Formatierung kommt.PHP zum Aufräumen eingefügte Microsoft-Eingabe

Ich kann <span whatever> nicht einfach loswerden, da TinyMCE für einige seiner Formatierungen auf das Span-Tag angewiesen ist, und ich kann diese Benutzer nicht dazu zwingen, TinyMCEs "Paste From Word" zu verwenden. Feature (das scheint sowieso nicht so gut zu funktionieren).

Wer weiß von einer Bibliothek/Klasse/Funktion, die sich darum kümmern würde? Es muss ein häufiges Problem sein, obwohl ich nichts Definitives finden kann. Ich habe kürzlich darüber nachgedacht, dass eine Reihe von Brute-Force-Regexes, die nach MS-spezifischen Mustern suchen, den Trick machen könnten, aber ich möchte etwas, das vielleicht schon verfügbar ist, nicht neu schreiben, es sei denn, ich muss es tun.

Auch die Fixierung von geschweiften Anführungszeichen, EM-Bindestriche usw. wäre gut. Ich habe jetzt meine eigenen Sachen, aber ich würde wirklich gerne einen MS-Conversion-Filter finden, um alle zu beherrschen.

Antwort

7

HTML Purifier erstellen standardkonformes Markup und filtern viele mögliche Angriffe (wie XSS) heraus.

Für schnellere Aufräumarbeiten, die keine XSS-Filterung erfordern, verwende ich die PECL-Erweiterung Tidy, die eine Bindung für das Tidy HTML-Dienstprogramm darstellt.

Wenn diese Ihnen nicht helfen, schlage ich vor, Sie wechseln zu FCKEditor, der diese Funktion built-in hat.

+0

Danke, aber keiner von beiden scheint mit MS-Formatierung fertig zu werden, woran ich mich hauptsächlich interessiere. HTML Purifier hat es für Version 3.5 geplant, aber mit "Forschung notwendig". – da5id

+0

Dann schlage ich vor, dass Sie zu fckeditor wechseln, der mit der Worteingabe umgehen kann. Meine Antwort wurde aktualisiert. –

+0

Hmm. Ich habe TinyMCE früher aus verschiedenen Gründen vor dem FCKeditor bevorzugt, aber das könnte mich beeinflussen. Danke für den Tipp & freue mich, meine +1 anzunehmen :) – da5id

0

Die Website http://word2cleanhtml.com/ macht einen guten Job bei der Konvertierung von Word. Ich benutze es in PHP durch Verschrotten, um einige Legacy-HTML zu verarbeiten, und bis jetzt funktioniert es ziemlich gut (das Ergebnis ist sehr sauber <p>, <b> Code). Da es sich um einen externen Dienst handelt, ist es natürlich nicht gut, ihn in der Online-Verarbeitung zu verwenden, wie in Ihrem Fall.

Wenn Sie es versuchen und es viele 400 Fehler bringt, versuchen Sie, die HTML mit Tidy zuerst zu filtern.

0

In meinem Fall gab es ein Muster. Der unerwünschte Teil mit immer begann

<!-- [if gte mso 9]> 

und endete mit einem

<![endif]--> 

So war meine Lösung auszuschneiden alles vor und nach diesem Block:

$array = explode("<!-", $string, 2); 
$begin = $array[0]; 
$end=substr(strrchr($string,'[endif]-->'),10); 
echo $begin.$end; 
0

In meinem Fall der hat gut funktioniert:

$text = strip_tags($text, '<p><a><em><span>'); 

Anstatt zu versuchen, Dinge, die Sie nicht möchten, wie z. B. das eingebettete Wort xml, herauszuziehen, können Sie einfach Ihre zulässigen Tags festlegen.