function phpAds_getBannerCache($banner) { global $phpAds_config; $buffer = $banner['htmltemplate']; // Strip slashes from urls $banner['url'] = stripslashes($banner['url']); $banner['imageurl'] = stripslashes($banner['imageurl']); // The following properties depend on data from the invocation process // and can't yet be determined: {zoneid}, {bannerid} // These properties will be set during invocation // Banner Networks if ($banner['storagetype'] == 'network') { $buffer = phpAds_parseNetworkInfo($buffer); } // Auto change HTML banner if ($banner['storagetype'] == 'html' || $banner['storagetype'] == 'network') { if ($banner['autohtml'] == 't' && $phpAds_config['type_html_auto']) { if ($buffer != '') { // Automatic remove all target='...' $buffer = eregi_replace(" target=['|\"]{0,1}[^'|\"|[:space:]]+['|\"]{0,1}", " ", $buffer); // Determine which types are present in the HTML $formpresent = eregi('<form', $buffer); $linkpresent = eregi('<a', $buffer); if ($formpresent) { // Add hidden field to forms $buffer = eregi_replace("(<form([^>]*)action=['|\"]{0,1})([^'|\"|[:space:]]+)(['|\"]{0,1}([^>]*)>)", "\\1{url_prefix}/adclick.php\\4" . "<input type='hidden' name='dest' value='\\3'>" . "<input type='hidden' name='bannerid' value='{bannerid}'>" . "<input type='hidden' name='source' value='{source}'>" . "<input type='hidden' name='zoneid' value='{zoneid}'>", $buffer); // Add target to all URLs $buffer = eregi_replace("<form ", "<form target='{target}' ", $buffer); } // Process link if ($linkpresent) { // Replace all links with adclick.php $newbanner = ''; $prevhrefpos = ''; $lowerbanner = strtolower($buffer); $hrefpos = strpos($lowerbanner, 'href='); while ($hrefpos > 0) { $tagpos = $hrefpos; $taglength = 0; // travel back to first '<' found while (substr($lowerbanner, $tagpos - 1, 1) != '<') { $tagpos--; } // travel up to next space while (substr($lowerbanner, $tagpos + $taglength, 1) != ' ') { $taglength++; } $tag = substr($lowerbanner, $tagpos, $taglength); // Do not convert href's inside of LINK tags // because if external css files are used an // adclick is logged for every impression. if ($tag != 'link' && $tag != 'base') { $hrefpos = $hrefpos + 5; $doublequotepos = strpos($lowerbanner, '"', $hrefpos); $singlequotepos = strpos($lowerbanner, "'", $hrefpos); if ($doublequotepos > 0 && $singlequotepos > 0) { if ($doublequotepos < $singlequotepos) { $quotepos = $doublequotepos; $quotechar = '"'; } else { $quotepos = $singlequotepos; $quotechar = "'"; } } else { if ($doublequotepos > 0) { $quotepos = $doublequotepos; $quotechar = '"'; } elseif ($singlequotepos > 0) { $quotepos = $singlequotepos; $quotechar = "'"; } else { $quotepos = 0; } } if ($quotepos > 0) { $endquotepos = strpos($lowerbanner, $quotechar, $quotepos + 1); if (substr($buffer, $quotepos + 1, 10) != '{targeturl' && strtolower(substr($buffer, $quotepos + 1, 11)) != 'javascript:' && strtolower(substr($buffer, $quotepos + 1, 7)) != 'mailto:') { $newbanner = $newbanner . substr($buffer, $prevhrefpos, $hrefpos - $prevhrefpos) . $quotechar . '{url_prefix}/adclick.php?bannerid=' . '{bannerid}&zoneid={zoneid}&source={source}&dest=' . urlencode(substr($buffer, $quotepos + 1, $endquotepos - $quotepos - 1)) . '&ismap='; } else { $newbanner = $newbanner . substr($buffer, $prevhrefpos, $hrefpos - $prevhrefpos) . $quotechar . substr($buffer, $quotepos + 1, $endquotepos - $quotepos - 1); } $prevhrefpos = $hrefpos + ($endquotepos - $quotepos); } else { $spacepos = strpos($lowerbanner, ' ', $hrefpos + 1); $endtagpos = strpos($lowerbanner, '>', $hrefpos + 1); if ($spacepos < $endtagpos) { $endpos = $spacepos; } else { $endpos = $endtagpos; } if (substr($buffer, $hrefpos, 10) != '{targeturl' && strtolower(substr($buffer, $hrefpos, 11)) != 'javascript:' && strtolower(substr($buffer, $hrefpos, 7)) != 'mailto:') { $newbanner = $newbanner . substr($buffer, $prevhrefpos, $hrefpos - $prevhrefpos) . '"' . '{url_prefix}/adclick.php?bannerid=' . '{bannerid}&zoneid={zoneid}&source={source}&dest=' . urlencode(substr($buffer, $hrefpos, $endpos - $hrefpos)) . '&ismap="'; } else { $newbanner = $newbanner . substr($buffer, $prevhrefpos, $hrefpos - $prevhrefpos) . '"' . substr($buffer, $hrefpos, $endpos - $hrefpos) . '"'; } $prevhrefpos = $hrefpos + ($endpos - $hrefpos); } } $hrefpos = strpos($lowerbanner, 'href=', $hrefpos + 1); } $buffer = $newbanner . substr($buffer, $prevhrefpos); // Add target to all URLs $buffer = eregi_replace("<a ", "<a target='{target}' ", $buffer); } //changes for HTML banners going through DoubleClick if ($banner['adserver'] == "doubleclick") { // replace [timestamp] with {random:10} $pattern = "/\\[timestamp\\]/i"; $replacement = "{random:10}"; $buffer = preg_replace($pattern, $replacement, $buffer); // insert click0 string in hrefs $pattern = "/(http:.*?;)(.*?)/i"; $replacement = "\$1click0={url_prefix}/adclick.php?bannerid={bannerid}&zoneid={zoneid}&source={source}&dest=;\$2"; $buffer = preg_replace($pattern, $replacement, $buffer); } else { if ($banner['adserver'] == "atlas") { // replace [timestamp] with {random:10} $pattern = "/\\[timestamp\\]/i"; $replacement = "{random:10}"; //$buffer = preg_replace ($pattern, $replacement, $buffer); // insert click0 and org string in hrefs $pattern = "/(http:.*?direct\\/01)?click=(.*?)/i"; $replacement = "\$1click={url_prefix}/adclick.php?bannerid={bannerid}&zoneid={zoneid}&source={source}&ord={random:10}&dest=\$2"; $buffer = preg_replace($pattern, $replacement, $buffer); } } // End link processing if (!$formpresent && !$linkpresent && $banner['url'] != '') { // No link or form $buffer = "<a href='{url_prefix}/adclick.php?bannerid={bannerid}&zoneid={zoneid}&source={source}&ismap=' target='{target}'>" . $buffer . "</a>"; } } else { if ($banner['url'] != '') { // HTML banner is left empty, but destination url is specified, // build an iframe with the right width and height to show the // destination URL $buffer = "<iframe width='" . $banner['width'] . "' height='" . $banner['height'] . "' framespacing='0' frameborder='no' src='" . $banner['url'] . "'>"; $buffer = "</iframe>"; } } } if (strpos($buffer, "{targeturl:") > 0) { while (eregi("\\{targeturl:([^\\}]*)\\}", $buffer, $regs)) { if (strpos($regs[1], '|source:') != false) { list($url, $source) = explode('|source:', $regs[1]); if (substr($source, 0, 1) == '+') { $source = '{source}-' . substr($source, 1, strlen($source) - 1); } } else { $source = '{source}'; $url = $regs[1]; } $buffer = str_replace($regs[0], '{url_prefix}/adclick.php?bannerid={bannerid}&zoneid={zoneid}&source=' . $source . '&dest=' . urlencode($url) . '&ismap=', $buffer); $buffer = str_replace('{targeturl=}', '{url_prefix}/adclick.php?bannerid={bannerid}&zoneid={zoneid}&source={source}&dest=', $buffer); } } // end of autoChange HTML Banner } // Set known properties $buffer = str_replace('{width}', $banner['width'], $buffer); $buffer = str_replace('{height}', $banner['height'], $buffer); $buffer = str_replace('{alt}', $banner['alt'], $buffer); // Set status text if (isset($banner['status']) && $banner['status'] != '') { $buffer = str_replace('{status}', $banner['status'], $buffer); $buffer = str_replace('[status]', '', $buffer); $buffer = str_replace('[/status]', '', $buffer); } else { $buffer = preg_replace("#\\[status\\](.*)\\[\\/status\\]#iU", '', $buffer); } // Set bannertext if (isset($banner['bannertext']) && $banner['bannertext'] != '') { $buffer = str_replace('{bannertext}', $banner['bannertext'], $buffer); } else { $buffer = str_replace('{bannertext}', '', $buffer); $buffer = eregi_replace("\\[bannertext\\](.*)\\[\\/bannertext\\]", '', $buffer); } // Set imageurl if ($banner['storagetype'] == 'sql' || $banner['storagetype'] == 'web' || $banner['storagetype'] == 'url') { $buffer = str_replace('{imageurl}', $banner['imageurl'], $buffer); $buffer = str_replace('{alt_imageurl}', $banner['alt_imageurl'], $buffer); } // Set flash variables if ($banner['contenttype'] == 'swf') { if ($banner['url'] != '') { $buffer = str_replace('{swf_param}', 'clickTAG={url_prefix}/adclick.php%3Fbannerid={bannerid}%26zoneid={zoneid}%26source={source}%26dest=' . urlencode($banner['url']), $buffer); } else { $buffer = str_replace('{swf_con}{swf_param}', '', $buffer); $buffer = str_replace('{swf_param}', '', $buffer); } switch ($banner['storagetype']) { case 'sql': $buffer = str_replace('{swf_con}', '&', $buffer); break; case 'web': $buffer = str_replace('{swf_con}', '?', $buffer); break; case 'url': $buffer = str_replace('{swf_con}', '?', $buffer); break; } // Replace targeturl: while (eregi("\\{targeturl:([^\\}]*)\\}", $buffer, $matches)) { if (strpos($matches[1], '|source:') != false) { list($url, $source) = explode('|source:', $matches[1]); if (substr($source, 0, 1) == '+') { $source = '{source}-' . substr($source, 1, strlen($source) - 1); } } else { $source = '{source}'; $url = $matches[1]; } $buffer = str_replace($matches[0], '{url_prefix}/adclick.php%3Fbannerid={bannerid}%26zoneid={zoneid}%26source=' . $source . '%26dest=' . urlencode($url), $buffer); } } // Replace targeturl if (isset($banner['url']) && $banner['url'] != '') { $buffer = str_replace('{targeturl}', '{url_prefix}/adclick.php?bannerid={bannerid}&zoneid={zoneid}&source={source}&dest=' . urlencode($banner['url']), $buffer); $buffer = str_replace('[targeturl]', '', $buffer); $buffer = str_replace('[/targeturl]', '', $buffer); $buffer = preg_replace("#\\[nourl\\](.*)\\[\\/nourl\\]#iU", '', $buffer); } else { $buffer = str_replace('{targeturl}', '', $buffer); $buffer = str_replace('[nourl]', '', $buffer); $buffer = str_replace('[/nourl]', '', $buffer); $buffer = preg_replace("#\\[targeturl\\](.*)\\[\\/targeturl\\]#iU", '', $buffer); } // Set Player version if (eregi("\\{pluginversion:([^\\}]*)\\}", $buffer, $matches)) { // Get default version $pluginversion = $matches[1]; // Flash player 3 or higher if ($banner['contenttype'] == 'swf' && $banner['pluginversion'] > 4) { $pluginversion = $banner['pluginversion'] . ',0,0,0'; } $buffer = str_replace($matches[0], $pluginversion, $buffer); } // Player version if (isset($banner['pluginversion']) && $banner['pluginversion'] != '') { $buffer = str_replace('{pluginversion}', $banner['pluginversion'], $buffer); } // Append if (isset($banner['append']) && $banner['append'] != '') { $buffer .= $banner['append']; } return $buffer; }
function phpAds_getBannerCache($banner) { global $phpAds_config; $buffer = $banner['htmltemplate']; // Strip slashes from urls $banner['url'] = stripslashes($banner['url']); $banner['imageurl'] = stripslashes($banner['imageurl']); // The following properties depend on data from the invocation process // and can't yet be determined: {zoneid}, {bannerid} // These properties will be set during invocation // Banner Networks if ($banner['storagetype'] == 'network') { $buffer = phpAds_parseNetworkInfo($buffer); } // Auto change HTML banner if ($banner['storagetype'] == 'html' || $banner['storagetype'] == 'network') { if ($banner['autohtml'] == 't' && $phpAds_config['type_html_auto']) { if ($buffer != '') { // Automatic remove all target='...' $buffer = eregi_replace(" target=['|\"]{0,1}[^'|\"|[:space:]]+['|\"]{0,1}", " ", $buffer); // Determine which types are present in the HTML $formpresent = eregi('<form', $buffer); $linkpresent = eregi('<a', $buffer); $areapresent = eregi('<area', $buffer); if ($formpresent) { // Add hidden field to forms $buffer = eregi_replace("(<form([^>]*)action=['|\"]{0,1})([^'|\"|[:space:]]+)(['|\"]{0,1}([^>]*)>)", "\\1{url_prefix}/adclick.php\\4" . "<input type='hidden' name='dest' value='\\3'>" . "<input type='hidden' name='bannerid' value='{bannerid}'>" . "<input type='hidden' name='source' value='{source}'>" . "<input type='hidden' name='zoneid' value='{zoneid}'>", $buffer); // Add target to all URLs $buffer = eregi_replace("<form ", "<form target='{target}' ", $buffer); } // Process link and areas if ($linkpresent || $areapresent) { // Replace all links with adclick.php $newbanner = ''; $prevhrefpos = ''; $lowerbanner = strtolower($buffer); $hrefpos = strpos($lowerbanner, 'href='); while ($hrefpos > 0) { $tagpos = $hrefpos; $taglength = 0; // travel back to first '<' found while (substr($lowerbanner, $tagpos - 1, 1) != '<') { $tagpos--; } // travel up to next space while (substr($lowerbanner, $tagpos + $taglength, 1) != ' ') { $taglength++; } $tag = substr($lowerbanner, $tagpos, $taglength); // Do not convert href's inside of link tags // because if external css files are used an // adclick is logged for every impression. if ($tag != 'link' && $tag != 'base') { $hrefpos = $hrefpos + 5; $doublequotepos = strpos($lowerbanner, '"', $hrefpos); $singlequotepos = strpos($lowerbanner, "'", $hrefpos); if ($doublequotepos > 0 && $singlequotepos > 0) { if ($doublequotepos < $singlequotepos) { $quotepos = $doublequotepos; $quotechar = '"'; } else { $quotepos = $singlequotepos; $quotechar = "'"; } } else { if ($doublequotepos > 0) { $quotepos = $doublequotepos; $quotechar = '"'; } elseif ($singlequotepos > 0) { $quotepos = $singlequotepos; $quotechar = "'"; } else { $quotepos = 0; } } if ($quotepos > 0) { $endquotepos = strpos($lowerbanner, $quotechar, $quotepos + 1); if (substr($buffer, $quotepos + 1, 10) != '{targeturl' && strtolower(substr($buffer, $quotepos + 1, 11)) != 'javascript:' && strtolower(substr($buffer, $quotepos + 1, 7)) != 'mailto:') { $newbanner = $newbanner . substr($buffer, $prevhrefpos, $hrefpos - $prevhrefpos) . $quotechar . '{url_prefix}/adclick.php?bannerid=' . '{bannerid}&zoneid={zoneid}&source={source}&dest=' . urlencode(phpAds_UnHTMLentities(substr($buffer, $quotepos + 1, $endquotepos - $quotepos - 1))) . '&ismap='; } else { $newbanner = $newbanner . substr($buffer, $prevhrefpos, $hrefpos - $prevhrefpos) . $quotechar . substr($buffer, $quotepos + 1, $endquotepos - $quotepos - 1); } $prevhrefpos = $hrefpos + ($endquotepos - $quotepos); } else { $spacepos = strpos($lowerbanner, ' ', $hrefpos + 1); $endtagpos = strpos($lowerbanner, '>', $hrefpos + 1); if ($spacepos < $endtagpos) { $endpos = $spacepos; } else { $endpos = $endtagpos; } if (substr($buffer, $hrefpos, 10) != '{targeturl' && strtolower(substr($buffer, $hrefpos, 11)) != 'javascript:' && strtolower(substr($buffer, $hrefpos, 7)) != 'mailto:') { $newbanner = $newbanner . substr($buffer, $prevhrefpos, $hrefpos - $prevhrefpos) . '"' . '{url_prefix}/adclick.php?bannerid=' . '{bannerid}&zoneid={zoneid}&source={source}&dest=' . urlencode(phpAds_UnHTMLentities(substr($buffer, $hrefpos, $endpos - $hrefpos))) . '&ismap="'; } else { $newbanner = $newbanner . substr($buffer, $prevhrefpos, $hrefpos - $prevhrefpos) . '"' . substr($buffer, $hrefpos, $endpos - $hrefpos) . '"'; } $prevhrefpos = $hrefpos + ($endpos - $hrefpos); } } $hrefpos = strpos($lowerbanner, 'href=', $hrefpos + 1); } $buffer = $newbanner . substr($buffer, $prevhrefpos); // Add target to all URLs $buffer = eregi_replace("<a ", "<a target='{target}' ", $buffer); $buffer = eregi_replace("<area ", "<area target='{target}' ", $buffer); } if (!$formpresent && !$linkpresent && !$areapresent && $banner['url'] != '') { // No link, area or form // Check if we really want to place the HTML code inside a link... // Do not do this if the HTML code contains an iframe, object or script tag, // Because we can then safely assume the link is handled by the HTML code itself if (!eregi('<script', $buffer) && !eregi('<object', $buffer) && !eregi('<iframe', $buffer)) { $buffer = "<a href='{url_prefix}/adclick.php?bannerid={bannerid}&zoneid={zoneid}&source={source}&ismap=' target='{target}'>" . $buffer . "</a>"; } } // Check for Google AdSense banners if (preg_match('/<script.*?src=".*?googlesyndication\\.com/is', $buffer)) { // Add workaround to count clicks $buffer = "<span>" . "<script language='JavaScript' type='text/javascript'><!--\n" . "/* openads={url_prefix} bannerid={bannerid} zoneid={zoneid} source={source} */\n" . "if (typeof phpAds_adg == 'undefined') {\n" . "\tdocument.write('<scr'+'ipt language=\"JavaScript\" type=\"text/javascript\" src=\"{url_prefix}/adg.js\"></scr'+'ipt>');\n" . "}\n" . "//--></script>" . $buffer . "</span>"; } } else { if ($banner['url'] != '') { // HTML banner is left empty, but destination url is specified, // build an iframe with the right width and height to show the // destination URL $buffer = "<iframe width='" . $banner['width'] . "' height='" . $banner['height'] . "' framespacing='0' frameborder='no' src='" . $banner['url'] . "'>"; $buffer .= "</iframe>"; } } } if (strpos($buffer, "{targeturl:") > 0) { while (eregi("\\{targeturl:([^\\}]*)\\}", $buffer, $regs)) { if (strpos($regs[1], '|source:') != false) { list($url, $source) = explode('|source:', $regs[1]); if (substr($source, 0, 1) == '+') { $source = '{source}-' . substr($source, 1, strlen($source) - 1); } } else { $source = '{source}'; $url = $regs[1]; } $buffer = str_replace($regs[0], '{url_prefix}/adclick.php?bannerid={bannerid}&zoneid={zoneid}&source=' . $source . '&dest=' . urlencode(phpAds_UnHTMLentities($url)) . '&ismap=', $buffer); } } $buffer = str_replace('{targeturl=}', '{url_prefix}/adclick.php?bannerid={bannerid}&zoneid={zoneid}&source={source}&dest=', $buffer); } // Set known properties $buffer = str_replace('{width}', $banner['width'], $buffer); $buffer = str_replace('{height}', $banner['height'], $buffer); $buffer = str_replace('{alt}', $banner['alt'], $buffer); // Set status text if (isset($banner['status']) && $banner['status'] != '') { // Add HTML entities, leaving single quotes as-is $banner['status'] = htmlspecialchars($banner['status']); $buffer = str_replace('{status}', $banner['status'], $buffer); $buffer = str_replace('[status]', '', $buffer); $buffer = str_replace('[/status]', '', $buffer); } else { $buffer = preg_replace("#\\[status\\](.*)\\[\\/status\\]#iU", '', $buffer); } // Set bannertext if (isset($banner['bannertext']) && $banner['bannertext'] != '') { $buffer = str_replace('{bannertext}', stripslashes($banner['bannertext']), $buffer); } else { $buffer = str_replace('{bannertext}', '', $buffer); $buffer = eregi_replace("\\[bannertext\\](.*)\\[\\/bannertext\\]", '', $buffer); } // Set imageurl if ($banner['storagetype'] == 'sql' || $banner['storagetype'] == 'web' || $banner['storagetype'] == 'url') { $buffer = str_replace('{imageurl}', $banner['imageurl'], $buffer); } // Set flash variables if ($banner['contenttype'] == 'swf') { if ($banner['url'] != '') { $buffer = str_replace('{swf_param}', 'clickTAG={url_prefix}/adclick.php%3Fbannerid={bannerid}%26zoneid={zoneid}%26source={source}%26dest=' . urlencode($banner['url']), $buffer); } else { $buffer = str_replace('{swf_con}{swf_param}', '', $buffer); $buffer = str_replace('{swf_param}', '', $buffer); } if (isset($banner['transparent']) && $banner['transparent'] == 't') { $buffer = preg_replace('#\\[/?transparent\\]#', '', $buffer); } else { $buffer = preg_replace('#\\[transparent\\].*?\\[/transparent\\]#', '', $buffer); } switch ($banner['storagetype']) { case 'sql': $buffer = str_replace('{swf_con}', '&', $buffer); break; case 'web': $buffer = str_replace('{swf_con}', '?', $buffer); break; case 'url': $buffer = str_replace('{swf_con}', '?', $buffer); break; } // Replace targeturl: while (eregi("\\{targeturl:([^\\}]*)\\}", $buffer, $matches)) { if (strpos($matches[1], '|source:') != false) { list($url, $source) = explode('|source:', $matches[1]); if (substr($source, 0, 1) == '+') { $source = '{source}-' . substr($source, 1, strlen($source) - 1); } } else { $source = '{source}'; $url = $matches[1]; } $buffer = str_replace($matches[0], '{url_prefix}/adclick.php%3Fbannerid={bannerid}%26zoneid={zoneid}%26source=' . $source . '%26dest=' . urlencode($url), $buffer); } } // Replace targeturl if (isset($banner['url']) && $banner['url'] != '') { $buffer = str_replace('{targeturl}', '{url_prefix}/adclick.php?bannerid={bannerid}&zoneid={zoneid}&source={source}&dest=' . urlencode($banner['url']), $buffer); $buffer = str_replace('[targeturl]', '', $buffer); $buffer = str_replace('[/targeturl]', '', $buffer); $buffer = preg_replace("#\\[nourl\\](.*)\\[\\/nourl\\]#iU", '', $buffer); } else { $buffer = str_replace('{targeturl}', '', $buffer); $buffer = str_replace('[nourl]', '', $buffer); $buffer = str_replace('[/nourl]', '', $buffer); $buffer = preg_replace("#\\[targeturl\\](.*)\\[\\/targeturl\\]#iU", '', $buffer); } // Set Player version if (eregi("\\{pluginversion:([^\\}]*)\\}", $buffer, $matches)) { // Get default version $pluginversion = $matches[1]; // Flash player 3 or higher if ($banner['contenttype'] == 'swf' && $banner['pluginversion'] > 4) { $pluginversion = $banner['pluginversion'] . ',0,0,0'; } $buffer = str_replace($matches[0], $pluginversion, $buffer); } // Append if (isset($banner['append']) && $banner['append'] != '') { $buffer .= $banner['append']; } return $buffer; }