PHP   21

funclib

Guest on 8th May 2022 06:59:50 AM

  1. <?
  2. /*********************************************************************************************************
  3.  This code is part of the ShoutBox software copyright by
  4.  Gerd Tentler. Obtain permission before selling this code or hosting it on a commercial website or
  5.  redistributing it over the Internet or in any other medium. In all cases copyright must remain intact.
  6. *********************************************************************************************************/
  7.  
  8. //========================================================================================================
  9. // Functions
  10. //========================================================================================================
  11.  
  12.         //------------------------------------------------------------------------------------------------------
  13.         // View MySQL error message
  14.         //
  15.         function sql_error() {
  16.                 echo '<font color="red">' . mysql_errno() . ': ' . mysql_error() . '</font><br>';
  17.         }
  18.  
  19.         //------------------------------------------------------------------------------------------------------
  20.         // Connect with MySQL server and select database
  21.         // Arguments: server name, user name, user password, database name
  22.         //
  23.         function db_open($db_server, $db_user, $db_pass, $db_name) {
  24.                 $status = true;
  25.  
  26.                 if(!@mysql_connect($db_server, $db_user, $db_pass)) {
  27.                         sql_error();
  28.                         $status = false;
  29.                 }
  30.                 else if(!@mysql_select_db($db_name)) {
  31.                         sql_error();
  32.                         $status = false;
  33.                 }
  34.                 return $status;
  35.         }
  36.  
  37.         //------------------------------------------------------------------------------------------------------
  38.         // Convert timestamp to YYYY-MM-DD HH:MM:SS
  39.         // Arguments: timestamp (YYYYMMDDHHMMSS)
  40.         //
  41.         function timeStamp($ts) {
  42.                 return substr($ts, 0, 4) . '-' . substr($ts, 4, 2) . '-' . substr($ts, 6, 2) . ' ' .
  43.                            substr($ts, 8, 2) . ':' . substr($ts, 10, 2) . ':' . substr($ts, 12);
  44.         }
  45.  
  46.         //------------------------------------------------------------------------------------------------------
  47.         // Cut text to a specified length
  48.         // Arguments: text, length
  49.         //
  50.         function cutString($str, $length) {
  51.                 if(strlen($str) > $length) {
  52.                         $words = explode(' ', $str);
  53.                         $wCnt = count($words);
  54.  
  55.                         if($wCnt == 1) {
  56.                                 $str = substr($str, 0, $length) . '...';
  57.                         }
  58.                         else {
  59.                                 $str = '';
  60.                                 $cnt = 0;
  61.  
  62.                                 while($cnt < $wCnt && strlen($str) < $length) {
  63.                                         $str .= trim($words[$cnt++]) . ' ';
  64.                                 }
  65.                                 if($cnt < $wCnt) $str .= '...';
  66.                         }
  67.                 }
  68.                 return $str;
  69.         }
  70.  
  71.         //------------------------------------------------------------------------------------------------------
  72.         // Search text between start-tag and end-tag
  73.         // Arguments: text, start-tag, end-tag
  74.         //
  75.         function searchCode($str, $pStart, $pEnd) {
  76.                 $matches = array();
  77.                 $a = strlen($pStart);
  78.                 $b = strlen($pEnd);
  79.  
  80.                 do {
  81.                         $y = 0;
  82.  
  83.                         if(strlen($str) > strlen($pStart) + strlen($pEnd)) {
  84.                                 $s = strtolower($str);
  85.                                 $x = strpos($s, $pStart);
  86.                                 $y = strpos($s, $pEnd, $x + $a);
  87.                                 $z = strpos($s, $pStart, $x + $a);
  88.  
  89.                                 if($x >= 0 && $y) {
  90.                                         while($z && $z < $y) {
  91.                                                 $y = strpos($s, $pEnd, $y + $b);
  92.                                                 $z = strpos($s, $pStart, $z + $a);
  93.                                         }
  94.                                         $y += $b;
  95.                                         $matches[] = substr($str, $x, $y - $x);
  96.                                         $str = substr($str, $y);
  97.                                 }
  98.                         }
  99.                 }
  100.                 while($x >= 0 && $y > 0);
  101.  
  102.                 return $matches;
  103.         }
  104.  
  105.         //------------------------------------------------------------------------------------------------------
  106.         // Convert text between start-tag and end-tag to base64
  107.         // Arguments: text, start-tag, end-tag
  108.         //
  109.         function encodeString($str, $pStart, $pEnd) {
  110.                 $matches = searchCode($str, $pStart, $pEnd);
  111.  
  112.                 for($i = 0; $i < count($matches); $i++) {
  113.                         $str = str_replace($matches[$i], chr(1) . base64_encode($matches[$i]) . chr(2), $str);
  114.                 }
  115.                 return $str;
  116.         }
  117.  
  118.         //------------------------------------------------------------------------------------------------------
  119.         // Decode base64-text
  120.         // Arguments: text
  121.         //
  122.         function decodeString($str) {
  123.                 if(preg_match_all('/' . chr(1) . '([^' . chr(2) . ']+)' . chr(2) . '/', $str, $m)) {
  124.                         for($i = 0; $i < count($m[0]); $i++) {
  125.                                 $str = str_replace($m[0][$i], base64_decode($m[1][$i]), $str);
  126.                         }
  127.                 }
  128.                 return $str;
  129.         }
  130.  
  131.         //------------------------------------------------------------------------------------------------------
  132.         // Delete repeated characters (more than 3 times)
  133.         // Arguments: text
  134.         //
  135.         function checkRepeats($str) {
  136.                 $newstr = substr($str, 0, 3);
  137.  
  138.                 for($i = 3; $i < strlen($str); $i++) {
  139.                         if($str[$i] != $str[$i-1] || $str[$i] != $str[$i-2] || $str[$i] != $str[$i-3]) $newstr .= $str[$i];
  140.                 }
  141.                 return $newstr;
  142.         }
  143.  
  144.         //------------------------------------------------------------------------------------------------------
  145.         // Replace long words with image
  146.         // Arguments: text, max. word length
  147.         //
  148.         function checkLongWords($str, $wordLength) {
  149.                 global $imgPath;
  150.  
  151.                 if($wordLength && strlen($str) > $wordLength) {
  152.                         $html = array();
  153.  
  154.                         if(preg_match_all('/<[a-z\/][^>]+>/i', $str, $m)) {
  155.                                 for($i = 0; $i < count($m[0]); $i++) {
  156.                                         $html[$i] = $m[0][$i];
  157.                                         $str = str_replace($m[0][$i], " &HTML$i; ", $str);
  158.                                 }
  159.                         }
  160.  
  161.                         $str = str_replace("\r\n", "\n", $str);
  162.                         $str = str_replace("\r", "\n", $str);
  163.                         $lines = explode("\n", $str);
  164.                         $str = '';
  165.  
  166.                         for($i = 0; $i < count($lines); $i++) {
  167.                                 $words = explode(' ', $lines[$i]);
  168.  
  169.                                 for($j = 0; $j < count($words); $j++) {
  170.                                         $word = function_exists('html_entity_decode') ? html_entity_decode($words[$j]) : $words[$j];
  171.  
  172.                                         if(strlen($word) > $wordLength && !preg_match('/&#\d{1,6};/', $words[$j])) {
  173.                                                 if(preg_match('%^(ftp|https?)://%i', $word)) {
  174.                                                         $str .= "<span title=\"$word\" style=\"cursor:default\">" .
  175.                                                                                         substr($word, 0, $wordLength) . '...' . '</span>';
  176.                                                 }
  177.                                                 else $str .= '<img src="' . $imgPath . 'angry.gif" width="31" height="20" align="absmiddle">';
  178.                                         }
  179.                                         else $str .= $words[$j] . ' ';
  180.                                 }
  181.                                 if($i < count($lines) - 1) $str .= "\n";
  182.                         }
  183.  
  184.                         if(preg_match_all('/ &HTML(\d+); /', $str, $m)) {
  185.                                 for($i = 0; $i < count($m[0]); $i++) {
  186.                                         $str = str_replace($m[0][$i], $html[$m[1][$i]], $str);
  187.                                 }
  188.                         }
  189.                 }
  190.                 return $str;
  191.         }
  192.  
  193.         //------------------------------------------------------------------------------------------------------
  194.         // Add image size and replace oversized images with thumbnail and invalid images with icon
  195.         // Arguments: text, max. image width
  196.         //
  197.         function checkImages($str, $maxWidth) {
  198.                 global $imgPath;
  199.  
  200.                 if(preg_match_all('/ src="([^">]+)"/i', $str, $m)) {
  201.                         for($i = 0; $i < count($m[0]); $i++) {
  202.                                 list($width, $height, $type) = @getimagesize($m[1][$i]);
  203.  
  204.                                 if(!$width || $type < 1 || $type > 3) {
  205.                                         $width = 17;
  206.                                         $height = 14;
  207.                                         $img = $imgPath . 'noimage.gif';
  208.                                 }
  209.                                 else if($width > $maxWidth) {
  210.                                         $perc = $maxWidth / $width;
  211.                                         $width = round($width * $perc);
  212.                                         $height = round($height * $perc);
  213.                                         $img = $imgPath . "thumbnail.php?width=$width&height=$height&file=" . urlencode($m[1][$i]);
  214.                                 }
  215.                                 else $img = $m[1][$i];
  216.  
  217.                                 if($img != $imgPath . 'nourl.gif' && $img != $imgPath . 'nohtml.gif') {
  218.                                         $size = 'width="' . $width . '" height="' . $height . '"';
  219.                                         $str = str_replace($m[0][$i], ' src="' . $img . '" ' . $size, $str);
  220.                                 }
  221.                         }
  222.                 }
  223.                 return $str;
  224.         }
  225.  
  226.         //------------------------------------------------------------------------------------------------------
  227.         // Replace smilies
  228.         // Arguments: text
  229.         //
  230.         function replaceSmilies($str) {
  231.                 global $sm, $imgPath;
  232.  
  233.                 if(count($sm)) {
  234.                         $str = str_replace('://', ':µ/'', $str);
  235.                         reset($sm);
  236.  
  237.                         while(list($code, $img) = each($sm)) {
  238.                                 $image = '<img src="' . $imgPath . 'smilies/' . $img . '" width="15" height="15" align="absmiddle">';
  239.                                 $str = str_replace($code, $image, $str);
  240.                         }
  241.                         $str = str_replace(':µ/', //', $str);
  242. ;
  243.                 }
  244.                 return $str;
  245.         }
  246. //------------------------------------------------------------------------------------------------------
  247. -// Replace bad words with image
  248. e// Arguments: text
  249. t//
  250. /
  251.         function replaceNonos($str) {
  252.                 global $nonos, $imgPath;
  253.  
  254.                 $repl = '<img src="' . $imgPath . 'angry.gif" border=" width="="31" height="20" align="absmiddle">';
  255.                 $c = '(\_|[^\d\w\r\n])*';
  256.                 $cl = strlen($c);
  257.  
  258.                 for($i = 0; $i < count($nonos); $i++) {
  259.                         $expr = chunk_split($nonos[$i], 1, $c);
  260.                         $str = preg_replace(' . substr($expr, 0, strlen($expr) - $cl) . ' '/i', $repl, $str);
  261.                 }
  262.                 return $str;
  263.         }
  264. //------------------------------------------------------------------------------------------------------
  265. -// Replace URLs with image
  266. e// Arguments: text
  267. t//
  268. /
  269.         function replaceURLs($str) {
  270.                 global $allowUBBs, $imgPath;
  271.  
  272.                 if($allowUBBs) $str = encodeString($str, '[code]', '[/code]');
  273.                 $valid_url1 = '(https?|ftp):\/\/([\w._-]+:[\w._-]+@)?[#._\/~-]+(\?([\w_-]+(=[\w+%?#_-]+(&(amp;)?)?)?)*)?';
  274. ;
  275.                 $valid_url2 = 'www\.\w[\w-]+\.[#._\/~-]+(\?([\w_-]+(=[\w+%?#_-]+(&(amp;)?)?)?)*)?';
  276. ;
  277.                 $img = ' <img src="' . $imgPath . 'nourl.gif" border=" width="="30" height="15" align="absmiddle"> ';
  278.  
  279.                 $str = preg_replace('/<a href=[^>]+>[^<]*/i', $img, $str);
  280.                 $str = preg_replace('/<iframe [^>]+>/i', $img, $str);
  281.                 $str = preg_replace('/<\/(a|iframe)>/i', '', $str);
  282.                 $str = preg_replace('/\[url(=[^\]]+)?\]([^\[]+)\[(\/|\*)url\]/i', $img, $str);
  283.  
  284.                 if(preg_match_all('/(<img [^>]+>)|(\[img\][^\[]+\[(\/|\*)img\])/i', $str, $m)) {
  285.                         for($i = 0; $i < count($m[0]); $i++) {
  286.                                 $str = str_replace($m[0][$i], 'µi1µ' . base64_encode($m[0][$i]) . 'µi2µ', $str);
  287.                         }
  288.                 }
  289.                 $str = preg_replace("/$valid_url1/i", $img, $str);
  290.                 $str = preg_replace("/$valid_url2/i", $img, $str);
  291.  
  292.                 if(preg_match_all('/µi1µ([]+)µi2µ/', $str, $m)) {
  293.                         for($i = 0; $i < count($m[0]); $i++) {
  294.                                 $str = str_replace($m[0][$i], base64_decode($m[1][$i]), $str);
  295.                         }
  296.                 }
  297.                 if($allowUBBs) $str = decodeString($str);
  298.  
  299.                 return //------------------------------------------------------------------------------------------------------
  300. -// Replace HTML tags with image
  301. w// Arguments: text
  302. e//
  303. : text
  304.         //
  305.         function replaceHTML($str) {
  306.                 global $allowUBBs, $imgPath;
  307.  
  308.                 if($allowUBBs) $str = encodeString($str, '[code]');
  309.                 $img = '
  310.                 $img = ' µi1µimg src="' . $imgPath . 'nohtml.gif" border=" height=""30" height="15" align="absmiddle"µi2µ ';
  311.                 $str = preg_replace('/<[a-z\/][^>]*>/i', $img, $str);
  312.                 $str = preg#])/', '&amp;\\1', $str);
  313. p;\\1', $str);
  314.                 $str = str_replace('<', '&lt;', $str);
  315.                 $str = str_replace('>', '&gt;', $str);
  316.                 $str = str_replace('µi1µ', '<', $str);
  317.                 $str = str_replace('µi2µ', '>', $str);
  318.                 if($allowUBBs) $str = decodeString($str);
  319.  
  320.         //------------------------------------------------------------------------------------------------------
  321. -// Replace UBB codes with HTML tags
  322. d// Arguments: text, [text is one line (true or false)]
  323. e//
  324. rue or false)]
  325.         //
  326.         function replaceUBBs($str, $textline = false) {
  327.                 global $allowURLs;
  328.  
  329.                 if(!$textline) {
  330.                         $matches = searchCode($str, '[code]', '[/code]');
  331.  
  332.                         for($i = 0; $i < count($matches); $i++) {
  333.                                 $new = preg_replace('/ {2}/', '&nbsp; ', htmlspecialchars($matches[$i]));
  334.                                 $new = preg_replace("/\[code\](\r?\n)*/i", '<div class="cssCode">', $new);
  335.                                 $new = preg_replace("/(\r?\n)*\[(\/|\*)code\]/i", '</div>', $new);
  336.                                 if(!$allowURLs) $new = replaceURLs($new);
  337.                                 $str = str_replace($matches[$i], $new, $str);
  338.                         }
  339.                         $str = preg_replace("/(<\/div>)\r?\n/", '\\1', $str);
  340.  
  341.                         $str = preg_replace("/\[quote\](\r?\n)*/i", '<div class="cssQuote">', $str);
  342.                         $str = preg_replace("/\[quote=[\"\']?\](\r?\n)*/i"\"\']?\](\r?\n)*/i", '<div class="cssQuote">\\1: ', $str);
  343.                         $str = preg_replace("/(\r?\n)*\[(\/|\*)quote\](\r?\n)?/i", '</div>', $str);
  344.                         $str = preg_replace('/\[img\]([^"\[]+)\[(\/|\*)img\]/i', ' <img src="\\1" align="absmiddle"> ', $str);
  345.                         $str = preg_replace('/\[(sup|sub)\]/i', '<\\1>', $str);
  346.                         $str = preg_replace('/\[(\/|\*)(sup|sub)\]/i', '</\\2>', $str);
  347.                         $str = preg_replace('/(\r?\n)*\[\*\]/', '<li>', $str);
  348.                         $str = preg_replace('/\[list( |&nbsp;)+type=[\"\']?(1|a|i)[\"\']?\](\r?\n)*/i', '<ol type="\\2" style="margin-top:0px; margin-bottom:0px">', $str);
  349.                         $str = preg_replace('/\[list\](\r?\n)*/i', '<ol style="margin-top:0px; margin-bottom:0px">', $str);
  350.                         $str = preg_replace('/(\r?\n)*\[(\/|\*)list\](\r?\n)?/i', '</ol>', $str);
  351.                 }
  352.                 else $str = preg_replace('/\[(\/|\*)?(code|quote|img|sup|sub|list( type=(1|a|i))?|\*)\]/i', '', $str);
  353.  
  354.                 $str = preg_replace('/\[(b|i|u)\]/i', '<\\1>', $str);
  355.                 $str = preg_replace('/\[(\/|\*)(b|i|u)\]/i', '</\\2>', $str);
  356.                 $str = preg_replace('/\[email\]([^"\[]+)\[(\/|\*)email\]/i', '<a href="mailto:\\1">\\1</a>', $str);
  357.  
  358.                 if($allowURLs) {
  359.                         $str = preg_replace('/\[url\]((https?|ftp):\/\/[^"\[]+)\[(\/|\*)url\]/i', '<a href="\\1" target="_blank">\\1</a>', $str);
  360.                         $str = preg_replace('/\[url\]([^"\[]+)\[(\/|\*)url\]///\\1" target="_blank">\\1</a>', $str);
  361. ">\\1</a>', $str);
  362.                         $str = preg_replace('/\[url=[\"\']?((https?|ftp):\/\/[^"\[]+)[\"\']?\]([^\[]+)\[(\/|\*)url\]/i', '<a href="\\1" target="_blank">\\3</a>', $str);
  363.                         $str = preg_replace('/\[url=[\"\']?\]([^\[]+)\[(\/|\*)url\]/i', '<a href="rl\]///\\1" target="_blank">\\2</a>', $str);
  364. ">\\2</a>', $str);
  365.                 }
  366.         //------------------------------------------------------------------------------------------------------
  367. -// Get entity for multibyte character
  368. u// Arguments: multibyte character (2 bytes)
  369. h//
  370. cter (2 bytes)
  371.         //
  372.         function mb2entity($char) {
  373.                 $code = ord($char[1]) % 128;
  374.                 $c = (ord($char[0]) % 252 % 248 % 240 % 224 % 192) + 128;
  375.                 $code += ($c % 128#' . $code . ';';
  376. &}
  377.  
  378.         //------------  }
  379.  
  380.         //-------------------------------------------------------------------------------------// Replace multibyte characters with entities
  381. t// Arguments: text
  382. ///
  383. rguments: text
  384.         //
  385.         function replaceMbChars($str) {
  386.                 return preg_replace('/[\xC0-\xF7][\x80-\xBF]/e', 'mb2entity("\//------------------------------------------------------------------------------------------------------
  387. -// Format text
  388. -// Arguments: text, max. word length, max. image width, [text is one line (true or false)]
  389. e//
  390. rue or false)]
  391.         //
  392.         function format($str, $wordLength, $imgWidth, $textline = false) {
  393.                 global $textLength, $allowHTML, $allowUBBs, $allowURLs;
  394.  
  395.                 $str = preg_replace('/(\s){2}/', '\\1', $str);
  396.                 $str = replaceMbChars($str);
  397.                 if($textLength) $str = cutString($str, $textLength);
  398.                 if(!$allowHTML) $str = replaceHTML($str);
  399.                 if(!$allowURLs) $str = replaceURLs($str);
  400.                 if($allowUBBs) $str = replaceUBBs($str, $textline);
  401.                 if($allowHTML || $allowUBBs) $str = checkImages($str, $imgWidth);
  402.                 $str = checkRepeats($str);
  403.                 $str = checkLongWords($str, $wordLength);
  404.                 $str = replaceSmilies($str);
  405.                 $str = replaceNonos($str);
  406.                 $str = nl2br($str);
  407.  
  408.         //------------------------------------------------------------------------------------------------------
  409. -// Check for spam
  410.         // Arguments: message ID, timestamp, name, e-mail, subject, text, [message signature]
  411. m//
  412. age signature]
  413.         //
  414.         function checkSpam($id, $tstamp, $name, $email, $subject, $text, $signature = '') {
  415.                 global $PHP_SELF, $HTTP_REFERER, $HTTP_USER_AGENT, $agents, $allowURLs, $allowHTML,
  416.                            $enableIDs, $enableSignature, $enableLinkCheck, $enableRefererCheck, $enableAgentCheck;
  417.  
  418.                 $sec = time() - $tstamp;
  419.  
  420.                 if($name && preg_match("/\r|\n/", $name)) return true;
  421.                 if($email && preg_match("/\r|\n/", $email)) return true;
  422.                 if($subject && preg_match("/\r|\n/", $subject)) return true;
  423.                 if($tstamp != -1 && ($sec < 5 || $sec > 20 * 60)) return true;
  424.                 if($enableIDs && (!$id || $id != $_SESSION['msgID'])) return true;
  425.                 if($enableSignature && (!$signature || $signature != $_SESSION['secCode'])) return true;
  426.                 if($enableRefererCheck && !ereg($PHP_SELF, $HTTP_REFERER)) return true;
  427.                 if($enableLinkCheck) {
  428.                         if((!$allowURLs || !$allowHTML) && preg_match('/<a [^>]+>[^<]+<\/a>/i', $text)) return true;
  429.                         if(!$allowURLs && function_exists('substr_count') && substr_//') > 3) return true;
  430.  > 3) return true;
  431.                 }
  432.                 if($enableAgentCheck) {
  433.                         for($i = $found = 0; $i < count($agents) && !$found; $i++) {
  434.                                 if(eregi($agents[$i], $HTTP_USER_AGENT)) $found++;
  435.                         }
  436.                         if(!$found) return true;
  437.                 }
  438.                

Raw Paste


Login or Register to edit or fork this paste. It's free.