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

将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[0-9]", $tags)) {

    global $fcolor;

    $numcolors = count($fcolor);

    for($i = 0; $i < $numcolors; $i++) {

    $test = "\\\cf" . ($i + 1);

    if(ereg($test, $tags)) {

    $color = $fcolor[$i];

    }

    }

    }

    // Capture font size changes.

    if(ereg("\\\fs[0-9][0-9]", $tags, $temp)) {

    $size = ereg_replace("\\\fs", "", $temp[0]);

    $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[0-9])||(\\\fs[0-9][0-9])", $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[$i])) {

    // Split the line by the backslash.

    $colors = explode("\\", $rtfile[$i]);

    $numOfColors = count($colors);

    for($k = 2; $k < $numOfColors; $k++) {

    // Find out how many different colors th

    //     ere are.

    if(ereg("[0-9]+", $colors[$k], $matches)) {

    $match[] = $matches[0];

    }

    }

    // For each color, convert it to hex.

    $numOfColors = count($match);

    for($k = 0; $k < $numOfColors; $k += 3) {

    $red = dechex($match[$k]);

    $red = $match[$k] < 16 ? "0$red" : $red;

    $green = dechex($match[$k + 1]);

    $green = $match[$k +1] < 16 ? "0$green" : $green;

    $blue = dechex($match[$k + 2]);

    $blue = $match[$k + 2] < 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[$i]);

    for($k = 0; $k < $lineLength; $k++) {

    if($rtfile[$i][$start] == "\\" && $rtfile[$i][$start + 1] != "\\") {

    // We are now dealing with a tag.

    $token .= $rtfile[$i][$k];

    if($rtfile[$i][$k] == " ") {

    $newFile[$i] .= ProcessTags($token, $i);

    $token = "";

    $start = $k + 1;

    }

    elseif($rtfile[$i][$k] == "\n") {

    $newFile[$i] .= ProcessTags($token, $i);

    $token = "";

    }

    }

    elseif($rtfile[$i][$start] == "{") {

    // We are now dealing with a tag.

    $token .= $rtfile[$i][$k];

    if($rtfile[$i][$k] == "}") {

    $newFile[$i] .= ProcessTags($token, $i);

    $token = "";

    $start = $k + 1;

    }

    }  

    else {

    // We are now dealing with a word.

    if($rtfile[$i][$k] == "\\" && $rtfile[$i][$k + 1] != "\\" && $rtfile[$i][$k - 1] != "\\") {

    $newFile[$i] .= ProcessWord($token);

    $token = $rtfile[$i][$k];

    $start = $k;

    }

    else {

    $token .= $rtfile[$i][$k];

    }

    }

    }

    }

    }

    $limit = sizeof($newFile);

    for($i = 0; $i < $limit; $i++) {

    print("$newFile[$i]\n");

    }

    ?>

    </body>

    </html>

相关推荐