<?php
/**
* library with mail functions.
*/
require_once dirname(__FILE__).'/accesscheck.php';
function HTML2Text($text)
{
// strip HTML, and turn links into the full URL
$text = preg_replace("/\r/", '', $text);
//$text = preg_replace("/\n/","###NL###",$text);
$text = preg_replace("/<script[^>]*>(.*?)<\/script\s*>/is", '', $text);
$text = preg_replace("/<style[^>]*>(.*?)<\/style\s*>/is", '', $text);
// would prefer to use < and > but the strip tags below would erase that.
// $text = preg_replace("/<a href=\"(.*?)\"[^>]*>(.*?)<\/a>/is","\\2\n{\\1}",$text,100);
// $text = preg_replace("/<a href=\"(.*?)\"[^>]*>(.*?)<\/a>/is","[URLTEXT]\\2[/URLTEXT][LINK]\\1[/LINK]",$text,100);
$text = preg_replace("/<a[^>]*href=[\"\'](.*)[\"\'][^>]*>(.*)<\/a>/Umis",
"[URLTEXT]\\2[ENDURLTEXT][LINK]\\1[ENDLINK]\n", $text);
$text = preg_replace("/<b>(.*?)<\/b\s*>/is", '*\\1*', $text);
$text = preg_replace("/<h[\d]>(.*?)<\/h[\d]\s*>/is", "**\\1**\n", $text);
// $text = preg_replace("/\s+/"," ",$text);
$text = preg_replace("/<i>(.*?)<\/i\s*>/is", '/\\1/', $text);
$text = preg_replace("/<\/tr\s*?>/i", "<\/tr>\n\n", $text);
$text = preg_replace("/<\/p\s*?>/i", "<\/p>\n\n", $text);
$text = preg_replace('/<br[^>]*?>/i', "<br>\n", $text);
$text = preg_replace("/<br[^>]*?\/>/i", "<br\/>\n", $text);
$text = preg_replace('/<table/i', "\n\n<table", $text);
$text = strip_tags($text);
// find all URLs and replace them back
preg_match_all('~\[URLTEXT\](.*)\[ENDURLTEXT\]\[LINK\](.*)\[ENDLINK\]~Umis', $text, $links);
foreach ($links[0] as $matchindex => $fullmatch) {
$linktext = $links[1][$matchindex];
$linkurl = $links[2][$matchindex];
// check if the text linked is a repetition of the URL
if (trim($linktext) == trim($linkurl) ||
'http://'.trim($linktext) == trim($linkurl)
) {
$linkreplace = $linkurl;
} else {
//# if link is an anchor only, take it out
if (strpos($linkurl, '#') !== false) {
$linkreplace = $linktext;
} else {
$linkreplace = $linktext.' <'.$linkurl.'>';
}
}
// $text = preg_replace('~'.preg_quote($fullmatch).'~',$linkreplace,$text);
$text = str_replace($fullmatch, $linkreplace, $text);
}
$text = preg_replace("/<a href=[\"\'](.*?)[\"\'][^>]*>(.*?)<\/a>/is", '[URLTEXT]\\2[ENDURLTEXT][LINK]\\1[ENDLINK]',
$text, 500);
$text = replaceChars($text);
$text = preg_replace('/###NL###/', "\n", $text);
$text = preg_replace("/\n /", "\n", $text);
$text = preg_replace("/\t/", ' ', $text);
// reduce whitespace
while (preg_match('/ /', $text)) {
$text = preg_replace('/ /', ' ', $text);
}
while (preg_match("/\n\s*\n\s*\n/", $text)) {
$text = preg_replace("/\n\s*\n\s*\n/", "\n\n", $text);
}
$ww = (int) getConfig('wordwrap');
if (!$ww) {
$ww = 70;
}
$text = wordwrap($text, $ww);
return $text;
}
function replaceChars($text)
{
// $document should contain an HTML document.
// This will remove HTML tags, javascript sections
// and white space. It will also convert some
// common HTML entities to their text equivalent.
$search = array(
"'&(quot|#34);'i", // Replace html entities
"'&(amp|#38);'i",
"'&(lt|#60);'i",
"'&(gt|#62);'i",
"'&(nbsp|#160);'i",
"'&(iexcl|#161);'i",
"'&(cent|#162);'i",
"'&(pound|#163);'i",
"'&(copy|#169);'i",
"'’'i",
"'–'i",
// "'&#(\d+);'e" // evaluate as php, deprecated in 5.5 and up
);
$replace = array(
'"',
'&',
'<',
'>',
' ',
chr(161),
chr(162),
chr(163),
chr(169),
"'",
'-',
// "chr(\\1)"
);
$text = preg_replace($search, $replace, $text);
// eze
// $text = html_entity_decode ( $text , ENT_QUOTES , $GLOBALS['strCharSet'] );
$text = html_entity_decode($text, ENT_QUOTES, 'UTF-8');
return $text;
}
function addAbsoluteResources($text, $url)
{
$parts = parse_url($url);
$tags = array(
'src\s*=\s*',
'href\s*=\s*',
'action\s*=\s*',
'background\s*=\s*',
'@import\s+',
'@import\s+url\(',
);
foreach ($tags as $tag) {
// preg_match_all('/'.preg_quote($tag).'"([^"|\#]*)"/Uim', $text, $foundtags);
// we're only handling nicely formatted src="something" and not src=something, ie quotes are required
// bit of a nightmare to not handle it with quotes.
preg_match_all('/('.$tag.')"([^"|\#]*)"/Uim', $text, $foundtags);
for ($i = 0; $i < count($foundtags[0]); ++$i) {
$match = $foundtags[2][$i];
$tagmatch = $foundtags[1][$i];
// print "$match<br/>";
if (preg_match('#^(http|javascript|https|ftp|mailto):#i', $match)) {
// scheme exists, leave it alone
} elseif (preg_match("#\[.*\]#U", $match)) {
// placeholders used, leave alone as well
} elseif (preg_match("/^\//", $match)) {
// starts with /
$text = preg_replace('#'.preg_quote($foundtags[0][$i]).'#im',
$tagmatch.'"'.$parts['scheme'].'://'.$parts['host'].$match.'"', $text, 1);
} else {
$path = '';
if (isset($parts['path'])) {
$path = $parts['path'];
}
if (!preg_match('#/$#', $path)) {
$pathparts = explode('/', $path);
array_pop($pathparts);
$path = implode('/', $pathparts);
$path .= '/';
}
$text = preg_replace('#'.preg_quote($foundtags[0][$i]).'#im',
$tagmatch.'"'.$parts['scheme'].'://'.$parts['host'].$path.$match.'"', $text, 1);
}
}
}
// $text = preg_replace('#PHPSESSID=[^\s]+
return $text;
}