将RTF格式的文件转成HTML并在网页中显示的代码
2018-09-07 13:53
  将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 
//nt 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. 
** Well 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> 
上一篇:PHP实现图片简单上传
下一篇:建立文件交换功能的脚本(二)