public function __construct($data, $cleanRtf = false) { //da der text evtl. bereinigt wird, müssen wir vorher //wissen ob es Wingdings in der font table gibt und //welchen index Wingdings einnimmt um die Symbole //durch einen Sonderzeichen Marker zu ersetzten //teil der Fontable mit Wingdings preg_match('/f[0-9]*.fnil *?Wingdings/i', $data, $matches); //jetzt brauchen wir noch den index von Wingdings in der fonttable //und ersetzten anschliessend alle Wingdings Sonderzeichen if (!empty($matches)) { preg_match('/[0-9]+/', $matches[0], $aWingdingsFontTableIndex); //jetzt ersetzen aber ohne die magic quotes einstellungen zu beachten $data = preg_replace('/\\{.f' . $aWingdingsFontTableIndex[0] . '\\\\[a-z0-9\\\\]+ *(.) *\\}/i', '###' . tx_mklib_util_MiscTools::getSpecialCharMarker() . '$1###', $data); } //@todo: warum ist es nötig den text zu bereinigen? wäre es nicht besser //den text zu reparieren damit z.B. evtl. das Sonderzeichen parsen funktioniert //womit die eigene ersetzung am ende von parse() wegfallen würde if ($cleanRtf) { //Fontable entfernen $data = preg_replace('/{.fonttbl.*?;}}/i', '', $data); //Colortable entfernen $data = preg_replace('/{.colortbl.*?}/i', '', $data); //Meta-Infos entfernen $data = preg_replace('/{.info.*?}}/i', '', $data); } $this->len = strlen($data); $this->rtf = $data; $this->wantXML = false; $this->wantHTML = false; $this->out = ""; $this->outstyles = ""; $this->styles = array(); $this->text = ""; if ($this->len == 0) { array_push($this->err, "No data in stream found"); } }
/** * Konvertiert spezielle Zeichen zu ASCII * @param string $text */ private function specialCharacters($text) { //der alte weg // $text_buffer = ""; // for($i = 0; $i < strlen($text); $i++) // $text_buffer .= $this->escapeCharacter($text[$i]); //der neue weg //einfach alle bekannten Sonderzeichen ersetzen foreach ($this->aSpecialChars as $sSpecialChar => $sReplacement) { //Sonderzeichen ersetzen. immer \' als Prefix //damit es als Sonderzeichen im RTF gilt $text = str_replace($sSpecialChar, '\\\'' . $sReplacement, $text); } //dann noch die Windings Sonderzeichen ersetzten $sSpecialCharMarker = tx_mklib_util_MiscTools::getSpecialCharMarker(); $text = preg_replace("/###{$sSpecialCharMarker}(.*?)###/mi", "}{{$this->getWindingsFont()} \\1}{{$this->getDefaultFont(false)}", $text); return $text; }