将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>