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

5年以前  |  阅读数:484 次  |  编程语言:PHP 

将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>   
 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例