/** * Returns the title of a html document. * @param string $string The contents of the input document. * @param string $input_encoding The encoding of the input document. If the value is not set, it is detected. * @param string $$output_encoding The encoding of the retrieved title. If the value is not set, the system encoding is assumend. * @return string The retrieved title, html-entities and extra-whitespace between the words are cleaned. */ function api_get_title_html(&$string, $output_encoding = null, $input_encoding = null) { if (@preg_match('/<head.+<title[^>]*>(.*)<\/title>/msi', $string, $matches)) { if (empty($output_encoding)) { $output_encoding = api_get_system_encoding(); } if (empty($input_encoding)) { $input_encoding = api_detect_encoding_html($string); } return trim(@preg_replace('/\s+/', ' ', api_html_entity_decode(api_convert_encoding($matches[1], $output_encoding, $input_encoding), ENT_QUOTES, $output_encoding))); } return ''; }
/** * This function streams a string to the client for download. * You have to ensure that the calling script then stops processing (exit();) * otherwise it may cause subsequent use of the page to want to download * other pages in php rather than interpreting them. * * @param string $full_string The string contents * @param boolean $forced Whether "save" mode is forced (or opening directly authorized) * @param string $name The name of the file in the end (including extension) * * @return false if file doesn't exist, true if stream succeeded */ public static function string_send_for_download($full_string, $forced = false, $name = '') { $filename = $name; $len = strlen($full_string); if ($forced) { //force the browser to save the file instead of opening it header('Content-type: application/octet-stream'); //header('Content-Type: application/force-download'); header('Content-length: ' . $len); if (preg_match("/MSIE 5.5/", $_SERVER['HTTP_USER_AGENT'])) { header('Content-Disposition: filename= ' . $filename); } else { header('Content-Disposition: attachment; filename= ' . $filename); } if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE')) { header('Pragma: '); header('Cache-Control: '); header('Cache-Control: public'); // IE cannot download from sessions without a cache } header('Content-Description: ' . $filename); header('Content-transfer-encoding: binary'); echo $full_string; return true; //You have to ensure that the calling script then stops processing (exit();) //otherwise it may cause subsequent use of the page to want to download //other pages in php rather than interpreting them. } else { //no forced download, just let the browser decide what to do according to the mimetype $content_type = self::file_get_mime_type($filename); header('Expires: Wed, 01 Jan 1990 00:00:00 GMT'); header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); header('Cache-Control: no-cache, must-revalidate'); header('Pragma: no-cache'); switch ($content_type) { case 'text/html': $encoding = @api_detect_encoding_html($full_string); if (!empty($encoding)) { $content_type .= '; charset=' . $encoding; } break; case 'text/plain': $encoding = @api_detect_encoding(strip_tags($full_string)); if (!empty($encoding)) { $content_type .= '; charset=' . $encoding; } break; } header('Content-type: ' . $content_type); header('Content-Length: ' . $len); $user_agent = strtolower($_SERVER['HTTP_USER_AGENT']); if (strpos($user_agent, 'msie')) { header('Content-Disposition: ; filename= ' . $filename); } else { header('Content-Disposition: inline; filename= ' . $filename); } echo $full_string; //You have to ensure that the calling script then stops processing (exit();) //otherwise it may cause subsequent use of the page to want to download //other pages in php rather than interpreting them. return true; } }