将RTF格式的文件转成HTML并在网页中显示的代码

  • 来源: 互联网 作者: rocket   2008-03-17/09:56
  • 将RTF格式的文件转成HTML并在网页中显示的代码
    它是这样工作的,将一个RTF文件上传,然后转成HTML显示出来,代码有点复杂,teaman还要好好研究,好象中文版有点问题。

        <html>
        <body>
        <?
        if(!($userfile)) {
        ?>
        <form enctype="multipart/form-data" action="<?print($PHP_SELF);?>" method=post>
        <input type=hidden name="max_file_size" value=2000>
        Send this file: <input name=userfile type=file>
        <input type=submit value=Upload>
        </form>
        </body>
        </html>
        <?
        exit;
        }
        function ProcessTags($tags, $line) {
        $html = "";
        global $color;
        global $size;
        global $bullets;
        // Remove spaces.
        $tags = trim($tags);
        // Found the beginning of the bulleted l
        //     ist.
        if(ereg("\\\pnindent", $tags)) {
        $html .= "<ul><li>";
        $bullets += $line;
        $tags = ereg_replace("\\\par", "", $tags);
        $tags = ereg_replace("\\\(tab)", "", $tags);
        }
        if($line - $bullets == 0) {
        $tags = ereg_replace("\\\par", "", $tags);
        }
        elseif($line - $bullets == 1) {
        if(ereg("\\\pntext", $tags)) {
        $html .= "<li>";
        $tags = ereg_replace("\\\par", "", $tags);
        $tags = ereg_replace("\\\(tab)", "", $tags);
        $bullets++;
        }
        else {
        $html .= "</ul>";
        $bullets = 0;
        }
        }
        // Convert Bold.
        if(ereg("\\\b0", $tags)){ $html .= "</b>"; }
        elseif(ereg("\\\b", $tags)) { $html .= "<b>"; }
        // Convert Italic.
        if(ereg("\\\i0", $tags)){ $html .= "</i>"; }
        elseif(ereg("\\\i", $tags)) { $html .= "<i>"; }
        // Convert Underline.
        if(ereg("\\\ulnone", $tags)){ $html .= "</u>"; }
        elseif(ereg("\\\ul", $tags)){ $html .= "<u>"; }
        // Convert Alignments.
        if(ereg("\\\pard\\\qc", $tags)) { $html .= "<div align=center>"; }
        elseif(ereg("\\\pard\\\qr", $tags)) { $html .= "<div align=right>"; }
        elseif(ereg("\\\pard", $tags)){ $html .= "<div align=left>"; }
        // Remove \pard from the tags so it does
        //     n't get confused with \par.
        $tags = ereg_replace("\\\pard", "", $tags);
        // Convert line breaks.
        if(ereg("\\\par", $tags)){ $html .= "<br>"; }
        // Use the color table to capture the fo
        //     nt color changes.
        if(ereg("\\\cf", $tags)) {
        global $fcolor;
        $numcolors = count($fcolor);
        for($i = 0; $i < $numcolors; $i++) {
        $test = "\\\cf" . ($i + 1);
        if(ereg($test, $tags)) {
        $color = $fcolor;
        }
        }
        }
        // Capture font size changes.
        if(ereg("\\\fs", $tags, $temp)) {
        $size = ereg_replace("\\\fs", "", $temp);
        $size /= 2;
        if($size <= 10) { $size = 1; }
        elseif($size <= 12) { $size = 2; }
        elseif($size <= 14) { $size = 3; }
        elseif($size <= 16) { $size = 4; }
        elseif($size <= 18) { $size = 5; }
        elseif($size <= 20) { $size = 6; }
        elseif($size <= 22) { $size = 7; }
        else{ $size = 8; }
        }
        // If there was a font color or size cha
        //     nge, change the font tag now.
        if(ereg("(\\\cf)", $tags)) {
        $html .= "</font><font size=$size color=$color>";
        }
        // Replace \tab with alternating spaces  
        //     and nonbreakingwhitespaces.
        if(ereg("\\\(tab)", $tags)) { $html .= "        "; }
        return $html;
        }
        function ProcessWord($word) {
        // Replace \\ with \
        $word = ereg_replace("{2,}", "\\", $word);
        // Replace \{ with {
        $word = ereg_replace("", "\{", $word);
        // Replace \} with }
        $word = ereg_replace("", "\}", $word);
        // Replace 2 spaces with one space.
        $word = ereg_replace(" ", "  ", $word);
        return $word;
        }
        $color = "000000";
        $size = 1;
        $bullets = 0;
        // Read the uploaded file into an array.
        //      
        $rtfile = file($userfile);
        $fileLength = count($rtfile);
        // Loop through the rest of the array
        for($i = 1; $i < $fileLength; $i++) {
        /*
        ** If the line contains "\colortbl" then we found the color table.
        ** We'll have to split it up into each individual red, green, and blue
        ** Convert it to hex and then put the red, green, and blue back together.
        ** Then store each into an array called fcolor.
        */
        if(ereg("^\{\\\colortbl", $rtfile)) {
        // Split the line by the backslash.
        $colors = explode("\\", $rtfile);
        $numOfColors = count($colors);
        for($k = 2; $k < $numOfColors; $k++) {
        // Find out how many different colors th
        //     ere are.
        if(ereg(", $matches)) {
        $match;
        }
        }
         
        // For each color, convert it to hex.
        $numOfColors = count($match);
        for($k = 0; $k < $numOfColors; $k += 3) {
        $red = dechex($match);
        $red = $match < 16 ? "0$red" : $red;
        $green = dechex($match);
        $green = $match < 16 ? "0$green" : $green;
        $blue = dechex($match);
        $blue = $match < 16 ? "0$blue" : $blue;
        $fcolor[] = "$red$green$blue";
        }
        $numOfColors = count($fcolor);
        }
        // Or else, we parse the line, pulling o
        //     ff words and tags.
        else {
        $token = "";
        $start = 0;
        $lineLength = strlen($rtfile);
        for($k = 0; $k < $lineLength; $k++) {
        if($rtfile != "\\") {
        // We are now dealing with a tag.
        $token .= $rtfile;
        if($rtfile == " ") {
        $newFile .= ProcessTags($token, $i);
        $token = "";
        $start = $k + 1;
        }
        elseif($rtfile == "\n") {
        $newFile .= ProcessTags($token, $i);
        $token = "";
        }
        }
        elseif($rtfile == "{") {
        // We are now dealing with a tag.
        $token .= $rtfile;
        if($rtfile == "}") {
        $newFile .= ProcessTags($token, $i);
        $token = "";
        $start = $k + 1;
        }
        }  
        else {
        // We are now dealing with a word.
        if($rtfile != "\\") {
        $newFile .= ProcessWord($token);
        $token = $rtfile;
        $start = $k;
        }
        else {
        $token .= $rtfile;
        }
        }
        }
        }
        }
        $limit = sizeof($newFile);
        for($i = 0; $i < $limit; $i++) {
        print("$newFile\n");
        }
        ?>
        </body>
        </html>


    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多