/**
  * Clean up a text to remove non-alphanumeric characters
  *
  * This method receives a UTF-8 string, normalizes and validates it, replaces all
  * non-alphanumeric characters with strings then returns the result.
  *
  * Any number of "allowed chars" can be passed as a UTF-8 string in NFC.
  *
  * @param	string	$text			Text to split, in UTF-8 (not normalized or sanitized)
  * @param	string	$allowed_chars	String of special chars to allow
  * @param	string	$encoding		Text encoding
  * @return	string					Cleaned up text, only alphanumeric chars are left
  *
  * @todo normalizer::cleanup being able to be used?
  */
 function cleanup($text, $allowed_chars = null, $encoding = 'utf-8')
 {
     global $phpbb_root_path, $phpEx;
     static $conv = array(), $conv_loaded = array();
     $words = $allow = array();
     // Convert the text to UTF-8
     $encoding = strtolower($encoding);
     if ($encoding != 'utf-8') {
         $text = utf8_recode($text, $encoding);
     }
     $utf_len_mask = array("À" => 2, "Ð" => 2, "à" => 3, "ð" => 4);
     /**
      * Replace HTML entities and NCRs
      */
     $text = htmlspecialchars_decode(utf8_decode_ncr($text), ENT_QUOTES);
     /**
      * Load the UTF-8 normalizer
      *
      * If we use it more widely, an instance of that class should be held in a
      * a global variable instead
      */
     utf_normalizer::nfc($text);
     /**
      * The first thing we do is:
      *
      * - convert ASCII-7 letters to lowercase
      * - remove the ASCII-7 non-alpha characters
      * - remove the bytes that should not appear in a valid UTF-8 string: 0xC0,
      *   0xC1 and 0xF5-0xFF
      *
      * @todo in theory, the third one is already taken care of during normalization and those chars should have been replaced by Unicode replacement chars
      */
     $sb_match = "ISTCPAMELRDOJBNHFGVWUQKYXZ\r\n\t!\"#\$%&'()*+,-./:;<=>?@[\\]^_`{|}~\v\fÀÁõö÷øùúûüýþÿ";
     $sb_replace = 'istcpamelrdojbnhfgvwuqkyxz                                                                              ';
     /**
      * This is the list of legal ASCII chars, it is automatically extended
      * with ASCII chars from $allowed_chars
      */
     $legal_ascii = ' eaisntroludcpmghbfvq10xy2j9kw354867z';
     /**
      * Prepare an array containing the extra chars to allow
      */
     if (isset($allowed_chars[0])) {
         $pos = 0;
         $len = strlen($allowed_chars);
         do {
             $c = $allowed_chars[$pos];
             if ($c < "€") {
                 /**
                  * ASCII char
                  */
                 $sb_pos = strpos($sb_match, $c);
                 if (is_int($sb_pos)) {
                     /**
                      * Remove the char from $sb_match and its corresponding
                      * replacement in $sb_replace
                      */
                     $sb_match = substr($sb_match, 0, $sb_pos) . substr($sb_match, $sb_pos + 1);
                     $sb_replace = substr($sb_replace, 0, $sb_pos) . substr($sb_replace, $sb_pos + 1);
                     $legal_ascii .= $c;
                 }
                 ++$pos;
             } else {
                 /**
                  * UTF-8 char
                  */
                 $utf_len = $utf_len_mask[$c & "ð"];
                 $allow[substr($allowed_chars, $pos, $utf_len)] = 1;
                 $pos += $utf_len;
             }
         } while ($pos < $len);
     }
     $text = strtr($text, $sb_match, $sb_replace);
     $ret = '';
     $pos = 0;
     $len = strlen($text);
     do {
         /**
          * Do all consecutive ASCII chars at once
          */
         if ($spn = strspn($text, $legal_ascii, $pos)) {
             $ret .= substr($text, $pos, $spn);
             $pos += $spn;
         }
         if ($pos >= $len) {
             return $ret;
         }
         /**
          * Capture the UTF char
          */
         $utf_len = $utf_len_mask[$text[$pos] & "ð"];
         $utf_char = substr($text, $pos, $utf_len);
         $pos += $utf_len;
         if ($utf_char >= UTF8_HANGUL_FIRST && $utf_char <= UTF8_HANGUL_LAST || $utf_char >= UTF8_CJK_FIRST && $utf_char <= UTF8_CJK_LAST || $utf_char >= UTF8_CJK_B_FIRST && $utf_char <= UTF8_CJK_B_LAST) {
             /**
              * All characters within these ranges are valid
              *
              * We separate them with a space in order to index each character
              * individually
              */
             $ret .= ' ' . $utf_char . ' ';
             continue;
         }
         if (isset($allow[$utf_char])) {
             /**
              * The char is explicitly allowed
              */
             $ret .= $utf_char;
             continue;
         }
         if (isset($conv[$utf_char])) {
             /**
              * The char is mapped to something, maybe to itself actually
              */
             $ret .= $conv[$utf_char];
             continue;
         }
         /**
          * The char isn't mapped, but did we load its conversion table?
          *
          * The search indexer table is split into blocks. The block number of
          * each char is equal to its codepoint right-shifted for 11 bits. It
          * means that out of the 11, 16 or 21 meaningful bits of a 2-, 3- or
          * 4- byte sequence we only keep the leftmost 0, 5 or 10 bits. Thus,
          * all UTF chars encoded in 2 bytes are in the same first block.
          */
         if (isset($utf_char[2])) {
             if (isset($utf_char[3])) {
                 /**
                  * 1111 0nnn 10nn nnnn 10nx xxxx 10xx xxxx
                  * 0000 0111 0011 1111 0010 0000
                  */
                 $idx = (ord($utf_char[0]) & 0x7) << 7 | (ord($utf_char[1]) & 0x3f) << 1 | (ord($utf_char[2]) & 0x20) >> 5;
             } else {
                 /**
                  * 1110 nnnn 10nx xxxx 10xx xxxx
                  * 0000 0111 0010 0000
                  */
                 $idx = (ord($utf_char[0]) & 0x7) << 1 | (ord($utf_char[1]) & 0x20) >> 5;
             }
         } else {
             /**
              * 110x xxxx 10xx xxxx
              * 0000 0000 0000 0000
              */
             $idx = 0;
         }
         /**
          * Check if the required conv table has been loaded already
          */
         if (!isset($conv_loaded[$idx])) {
             $conv_loaded[$idx] = 1;
             $file = $phpbb_root_path . 'includes/utf/data/search_indexer_' . $idx . '.' . $phpEx;
             if (file_exists($file)) {
                 $conv += (include $file);
             }
         }
         if (isset($conv[$utf_char])) {
             $ret .= $conv[$utf_char];
         } else {
             /**
              * We add an entry to the conversion table so that we
              * don't have to convert to codepoint and perform the checks
              * that are above this block
              */
             $conv[$utf_char] = ' ';
             $ret .= ' ';
         }
     } while (1);
     return $ret;
 }
 function my_preg_match($pattern, $subject)
 {
     // start regullar expression
     preg_match($pattern, $subject, $out);
     // if there is some result... process it and return it
     if (isset($out[1])) {
         // cdata
         $out[1] = strtr($out[1], array('<![CDATA[' => '', ']]>' => ''));
         if (isset($this->rsscp) && $this->rsscp != 'UTF-8') {
             // recode with phpBB´s functions
             $out[1] = utf8_recode($out[1], $this->rsscp);
         }
         // Return result
         return trim($out[1]);
     } else {
         // if there is NO result, return empty string
         return '';
     }
 }
/**
* Function for recoding text with the default language
*
* @param string $text text to recode to utf8
* @param bool $grab_user_lang if set to true the function tries to use $convert_row['user_lang'] (and falls back to $convert_row['poster_id']) instead of the boards default language
*/
function phpbb_set_encoding($text, $grab_user_lang = true)
{
	global $lang_enc_array, $convert_row;
	global $convert, $phpEx;

	/*static $lang_enc_array = array(
		'korean'						=> 'euc-kr',
		'serbian'						=> 'windows-1250',
		'polish'						=> 'iso-8859-2',
		'kurdish'						=> 'windows-1254',
		'slovak'						=> 'Windows-1250',
		'russian'						=> 'windows-1251',
		'estonian'						=> 'iso-8859-4',
		'chinese_simplified'			=> 'gb2312',
		'macedonian'					=> 'windows-1251',
		'azerbaijani'					=> 'UTF-8',
		'romanian'						=> 'iso-8859-2',
		'romanian_diacritice'			=> 'iso-8859-2',
		'lithuanian'					=> 'windows-1257',
		'turkish'						=> 'iso-8859-9',
		'ukrainian'						=> 'windows-1251',
		'japanese'						=> 'shift_jis',
		'hungarian'						=> 'ISO-8859-2',
		'romanian_no_diacritics'		=> 'iso-8859-2',
		'mongolian'						=> 'UTF-8',
		'slovenian'						=> 'windows-1250',
		'bosnian'						=> 'windows-1250',
		'czech'							=> 'Windows-1250',
		'farsi'							=> 'Windows-1256',
		'croatian'						=> 'windows-1250',
		'greek'							=> 'iso-8859-7',
		'russian_tu'					=> 'windows-1251',
		'sakha'							=> 'UTF-8',
		'serbian_cyrillic'				=> 'windows-1251',
		'bulgarian'						=> 'windows-1251',
		'chinese_traditional_taiwan'	=> 'big5',
		'chinese_traditional'			=> 'big5',
		'arabic'						=> 'windows-1256',
		'hebrew'						=> 'WINDOWS-1255',
		'thai'							=> 'windows-874',
		//'chinese_traditional_taiwan'	=> 'utf-8' // custom modified, we may have to do an include :-(
	);*/

	if (empty($lang_enc_array))
	{
		$lang_enc_array = array();
	}

	$get_lang = trim(get_config_value('default_lang'));

	// Do we need the users language encoding?
	if ($grab_user_lang && !empty($convert_row))
	{
		if (!empty($convert_row['user_lang']))
		{
			$get_lang = trim($convert_row['user_lang']);
		}
		else if (!empty($convert_row['poster_id']))
		{
			global $src_db, $same_db;

			if ($convert->mysql_convert && $same_db)
			{
				$src_db->sql_query("SET NAMES 'binary'");
			}

			$sql = 'SELECT user_lang
				FROM ' . $convert->src_table_prefix . 'users
				WHERE user_id = ' . (int) $convert_row['poster_id'];
			$result = $src_db->sql_query($sql);
			$get_lang = (string) $src_db->sql_fetchfield('user_lang');
			$src_db->sql_freeresult($result);

			if ($convert->mysql_convert && $same_db)
			{
				$src_db->sql_query("SET NAMES 'utf8'");
			}

			$get_lang = (!trim($get_lang)) ? trim(get_config_value('default_lang')) : trim($get_lang);
		}
	}

	if (!isset($lang_enc_array[$get_lang]))
	{
		$filename = $convert->options['forum_path'] . '/language/lang_' . $get_lang . '/lang_main.' . $phpEx;

		if (!file_exists($filename))
		{
			$get_lang = trim(get_config_value('default_lang'));
		}

		if (!isset($lang_enc_array[$get_lang]))
		{
			include($convert->options['forum_path'] . '/language/lang_' . $get_lang . '/lang_main.' . $phpEx);
			$lang_enc_array[$get_lang] = $lang['ENCODING'];
			unset($lang);
		}
	}

	$encoding = $lang_enc_array[$get_lang];

	return utf8_recode($text, $lang_enc_array[$get_lang]);
}
Beispiel #4
0
/**
* Trying to convert returned system message to utf8
*
* PHP assumes such messages are ISO-8859-1 so we'll do that too
* and if it breaks messages we'll blame it on them ;-)
*/
function utf8_convert_message($message)
{
	// First of all check if conversion is neded at all, as there is no point
	// in converting ASCII messages from ISO-8859-1 to UTF-8
	if (!preg_match('/[\x80-\xFF]/', $message))
	{
		return utf8_htmlspecialchars($message);
	}

	// else we need to convert some part of the message
	return utf8_htmlspecialchars(utf8_recode($message, 'ISO-8859-1'));
}
Beispiel #5
0
* @ignore
*/
define('IN_PHPBB', true);
$phpbb_root_path = defined('PHPBB_ROOT_PATH') ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include $phpbb_root_path . 'common.' . $phpEx;
include $phpbb_root_path . 'includes/functions_display.' . $phpEx;
// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup(array('memberlist', 'groups'));
// www.phpBB-SEO.com SEO TOOLKIT BEGIN
if (!empty($_REQUEST['un'])) {
    $_REQUEST['un'] = rawurldecode($_REQUEST['un']);
    if (!$phpbb_seo->is_utf8($_REQUEST['un'])) {
        $_REQUEST['un'] = utf8_normalize_nfc(utf8_recode($_REQUEST['un'], 'ISO-8859-1'));
    }
}
// www.phpBB-SEO.com SEO TOOLKIT END
// Grab data
$mode = request_var('mode', '');
$action = request_var('action', '');
$user_id = request_var('u', ANONYMOUS);
$username = request_var('un', '', true);
$group_id = request_var('g', 0);
$topic_id = request_var('t', 0);
// Check our mode...
if (!in_array($mode, array('', 'group', 'viewprofile', 'email', 'contact', 'searchuser', 'leaders'))) {
    trigger_error('NO_MODE');
}
switch ($mode) {
Beispiel #6
0
 /**
  * Returns the full REQUEST_URI
  */
 public function seo_req_uri()
 {
     $this->seo_path['uri'] = $this->request->server('HTTP_X_REWRITE_URL');
     // IIS  isapi_rewrite
     if (empty($this->seo_path['uri'])) {
         // Apache mod_rewrite
         $this->seo_path['uri'] = $this->request->server('REQUEST_URI');
     }
     if (empty($this->seo_path['uri'])) {
         $this->seo_path['uri'] = $this->request->server('SCRIPT_NAME') . (($qs = $this->request->server('QUERY_STRING')) != '' ? "?{$qs}" : '');
     }
     $this->seo_path['uri'] = str_replace('%26', '&', rawurldecode(ltrim($this->seo_path['uri'], '/')));
     // workaround for FF default iso encoding
     if (!$this->is_utf8($this->seo_path['uri'])) {
         $this->seo_path['uri'] = \utf8_normalize_nfc(\utf8_recode($this->seo_path['uri'], 'iso-8859-1'));
     }
     $this->seo_path['uri'] = $this->seo_path['root_url'] . $this->seo_path['uri'];
     return $this->seo_path['uri'];
 }
 /**
  * Returns the full REQUEST_URI
  */
 function seo_req_uri()
 {
     if (!empty($_SERVER['HTTP_X_REWRITE_URL'])) {
         // IIS  isapi_rewrite
         $this->seo_path['uri'] = ltrim($_SERVER['HTTP_X_REWRITE_URL'], '/');
     } elseif (!empty($_SERVER['REQUEST_URI'])) {
         // Apache mod_rewrite
         $this->seo_path['uri'] = ltrim($_SERVER['REQUEST_URI'], '/');
     } else {
         // no mod rewrite
         $this->seo_path['uri'] = ltrim($_SERVER['SCRIPT_NAME'], '/') . (!empty($_SERVER['QUERY_STRING']) ? '?' . $_SERVER['QUERY_STRING'] : '');
     }
     $this->seo_path['uri'] = str_replace('%26', '&', rawurldecode($this->seo_path['uri']));
     // workaround for FF default iso encoding
     if (!$this->is_utf8($this->seo_path['uri'])) {
         $this->seo_path['uri'] = utf8_normalize_nfc(utf8_recode($this->seo_path['uri'], 'iso-8859-1'));
     }
     $this->seo_path['uri'] = $this->seo_path['root_url'] . $this->seo_path['uri'];
     return $this->seo_path['uri'];
 }
 /**
  * Sends an email to the board administrator with their password and some useful links
  */
 function final_stage($mode, $sub)
 {
     global $auth, $config, $db, $user, $template, $user, $phpbb_root_path, $phpEx, $phpbb_seo, $cache;
     $update_info = '';
     if (!sizeof($this->errors)) {
         if ($mode != 'uninstall_gym_sitemaps') {
             set_gym_config('gym_version', $this->version, 'main', $this->old_config);
             $this->config_report[] = "SET <b>gym_version</b> to {$this->version}";
             set_config('gym_installed', 1);
         } else {
             set_config('gym_installed', 0);
         }
         add_log('admin', 'SEO_LOG_' . strtoupper($mode), $this->version);
     } else {
         set_config('gym_installed', 0);
         add_log('admin', 'SEO_LOG_' . strtoupper($mode) . '_FAIL', $this->errors);
         $cache->purge();
         $this->p_master->error($user->lang['SEO_ERROR_INSTALL'] . '<br/><pre>' . implode('<br/>', $this->errors) . '</pre>', __LINE__, __FILE__);
     }
     $cache->purge();
     $this->page_title = $user->lang['STAGE_FINAL'];
     if ($mode != 'uninstall_gym_sitemaps') {
         if ($mode == 'update_gym_sitemaps') {
             $key = 'UPDATE';
             $lang_key = strpos($user->lang_name, 'fr') !== false ? 'FR' : '';
             if ($update_infos = @file("./docs/update_from_last{$lang_key}.txt")) {
                 foreach ($update_infos as $line) {
                     $line = str_replace(array("\r", "\n"), '', utf8_htmlspecialchars(is_utf8($line) ? $line : utf8_recode($line, 'iso-8859-1')));
                     $update_info .= (preg_match('`^#`', $line) ? "<b style=\"color:blue;\">{$line}</b>" : $line) . '<br/>';
                 }
             }
         } else {
             $key = 'INSTALL';
         }
         $submit_action = append_sid($phpbb_root_path . 'adm/index.' . $phpEx . '?sid=' . $user->session_id);
         $title = $user->lang['SEO_INSTALL_CONGRATS'];
         $body = sprintf($user->lang["SEO_{$key}_CONGRATS_EXPLAIN"], $this->modrtype_lang['link'], $this->version) . '<br/>' . implode('<br/>', $this->config_report) . "<br/><br/><hr/><pre>{$update_info}</pre>";
     } else {
         $submit_action = append_sid($phpbb_root_path . 'index.' . $phpEx);
         $title = $user->lang['UN_SEO_INSTALL_CONGRATS'];
         $body = sprintf($user->lang['UN_SEO_INSTALL_CONGRATS_EXPLAIN'], $this->modrtype_lang['link'], $this->version);
     }
     $template->assign_vars(array('TITLE' => $title, 'BODY' => $body, 'L_SUBMIT' => $user->lang['SEO_FINAL_' . strtoupper($mode)], 'U_ACTION' => $submit_action));
 }
Beispiel #9
0
    }
    $post_text = utf8_normalize_nfc(request_var('contents', '', true));
    $uid = $bitfield = $options = '';
    // will be modified by generate_text_for_storage
    $allow_bbcode = $allow_urls = $allow_smilies = true;
    generate_text_for_storage($post_text, $uid, $bitfield, $options, $allow_bbcode, $allow_urls, $allow_smilies);
    // let's try something else here in order to get the bbcode_uid and bbcode_bitfield
    $message_parser = new parse_message();
    $message_parser->message = $post_text;
    if (!isset($uid)) {
        $uid = $message_parser->bbcode_uid;
    }
    if (!isset($bitfield)) {
        $bitfield = $message_parser->bbcode_bitfield;
    }
    $sql_ary = array('post_text' => utf8_recode($post_text, 'utf-8'), 'bbcode_uid' => $uid, 'bbcode_bitfield' => $bitfield, 'post_edit_time' => $edit_time, 'post_edit_count' => $edit_count, 'post_edit_user' => $edit_user);
    $sql = 'UPDATE ' . POSTS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . " WHERE post_id = {$post_id}";
    $db->sql_query($sql);
    $text = generate_text_for_display($sql_ary['post_text'], $sql_ary['bbcode_uid'], $sql_ary['bbcode_bitfield'], 7);
    $template->assign_vars(array('SEND_TEXT' => true, 'TEXT' => $text, 'EDIT_IMG' => $user->img('icon_post_edit', 'EDIT_POST'), 'DELETE_IMG' => $user->img('icon_post_delete', 'DELETE_POST')));
} elseif ($post_id) {
    $sql = 'SELECT p.*, f.*, t.*
	FROM ' . POSTS_TABLE . ' p, ' . TOPICS_TABLE . ' t, ' . FORUMS_TABLE . " f\n\tWHERE p.post_id = {$post_id} AND p.topic_id = t.topic_id";
    $result = $db->sql_query($sql);
    $row = $db->sql_fetchrow($result);
    $db->sql_freeresult($result);
    // HTML, BBCode, Smilies, Images and Flash status
    $bbcode_status = $config['allow_bbcode'] && ($auth->acl_get('f_bbcode', $row['forum_id']) || $row['forum_id'] == 0) ? true : false;
    $smilies_status = $bbcode_status && $config['allow_smilies'] && $auth->acl_get('f_smilies', $row['forum_id']) ? true : false;
    $img_status = $bbcode_status && $auth->acl_get('f_img', $row['forum_id']) ? true : false;
    $url_status = $config['allow_post_links'] ? true : false;
Beispiel #10
0
 /**
  * Main parsing function for ATOM format
  */
 private function parse_atom()
 {
     // get root
     $root = $this->data->children('http://www.w3.org/2005/Atom');
     // get feed data
     foreach ($root as $ak => $av) {
         if ($ak != 'entry') {
             $this->check_feed_attributes($ak);
         }
     }
     // do we have some data ?
     if (isset($root->entry)) {
         $i = 0;
         foreach ($root->entry as $entry) {
             $details = $entry->children('http://www.w3.org/2005/Atom');
             foreach ($details as $k => $v) {
                 $this->items[$i][utf8_recode($k, $this->encoding)] = (string) utf8_recode($v, $this->encoding);
                 $this->check_item_attributes($k);
             }
             $i++;
         }
     }
 }
Beispiel #11
0
$phpbb_root_path = defined('PHPBB_ROOT_PATH') ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include $phpbb_root_path . 'common.' . $phpEx;
include $phpbb_root_path . 'includes/functions_display.' . $phpEx;
include $phpbb_root_path . 'includes/bbcode.' . $phpEx;
// www.phpBB-SEO.com SEO TOOLKIT BEGIN
if (empty($_REQUEST['f'])) {
    $phpbb_seo->get_forum_id($session_forum_id);
    if ($session_forum_id > 0) {
        $_REQUEST['f'] = (int) $session_forum_id;
    }
}
if (!empty($_REQUEST['hilit'])) {
    $_REQUEST['hilit'] = rawurldecode($_REQUEST['hilit']);
    if (!$phpbb_seo->is_utf8($_REQUEST['hilit'])) {
        $_REQUEST['hilit'] = utf8_normalize_nfc(utf8_recode($_REQUEST['hilit'], 'iso-8859-1'));
    }
}
// www.phpBB-SEO.com SEO TOOLKIT END
// Start session management
$user->session_begin();
$auth->acl($user->data);
// Initial var setup
$forum_id = request_var('f', 0);
$topic_id = request_var('t', 0);
$post_id = request_var('p', 0);
$voted_id = request_var('vote_id', array('' => 0));
// BEGIN Topic solved
$solved_id = request_var('ys', 0);
$unsolved = request_var('ns', 0);
// END Topic solved
Beispiel #12
0
 /**
  * GGs_rss() will build all rss output
  * @access private
  */
 function GGs_rss()
 {
     global $phpEx, $db, $board_config, $userdata, $phpbb_root_path, $lang, $phpbb_seo;
     // Set up msg outpout
     $this->rss_config['rss_last'] = $this->rss_config['rss_first'] ? $this->rss_config['rss_last'] : TRUE;
     // Initialize SQL cycling : do not query for more than required
     $this->rss_config['rss_sql_limit'] = $this->rss_config['rss_sql_limit'] > $this->rss_config['rss_url_limit'] ? $this->rss_config['rss_url_limit'] : $this->rss_config['rss_sql_limit'];
     // Built the auth warning
     $auth_msg = '';
     if ($this->actions['auth_checked']) {
         $auth_msg = '<br/><br/>' . (is_numeric($this->actions['list_id']) && $this->actions['list_id'] > 0 ? sprintf($lang['rss_auth_this'], $userdata['username']) : sprintf($lang['rss_auth_some'], $userdata['username']));
         $auth_msg = htmlspecialchars($auth_msg);
     }
     // XSLT styling
     $rss_xslt = '';
     if ($this->rss_config['rss_xslt']) {
         // Isn't this a bit stupid, we need to trick browsers to allow xlst usage
         // We do it by adding some space chars at the beginning of the xml code
         // FF 2 and IE7 only look for the first 500 chars to decide it's rss or not
         // and impose their private handling
         $blanc_fix = '';
         if ($this->rss_config['rss_force_xslt']) {
             for ($i = 0; $i < 650; $i++) {
                 $blanc_fix .= ' ';
             }
             $blanc_fix = "\n" . '<!-- Some spaces ' . $blanc_fix . ' to force xlst -->';
         }
         $rss_xslt = $this->rss_config['rss_xslt'] ? '<?xml-stylesheet title="XSL_formatting" type="text/xsl" href="' . $this->path_config['rss_url'] . 'ggs_style/mxrss2.xsl"?>' . $blanc_fix : '';
     }
     $this->output_data['data'] = '<?xml version="1.0" encoding="utf-8"?>' . $rss_xslt . "\n" . '<!--	Generated by Google Yahoo MSN Sitemaps and RSS ' . $this->ggsitemaps_config['ggs_ver'] . ' - ' . $this->ggsitemaps_config['ggs_c_info'] . ' -->' . "\n" . '<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">';
     $this->style_config['rsschan_img_tpl'] = '<image>' . "\n\t\t\t" . '<title>%s</title>' . "\n\t\t\t" . '<url>%s</url>' . "\n\t\t\t" . '<link>%s</link>' . "\n\t\t" . '</image>';
     $this->style_config['rsschan_tpl'] = "\n\t" . '<channel>' . "\n\t\t" . '<title>%s</title>' . "\n\t\t" . '<link>%s</link>' . "\n\t\t" . '<description>%s</description>' . $this->rss_config['rss_lang'] . $this->rss_config['c_info'] . "\n\t\t" . '<lastBuildDate>%s</lastBuildDate>' . "\n\t\t" . '%s' . "\n\t\t" . '<docs>http://blogs.law.harvard.edu/tech/rss</docs>' . "\n\t\t" . '<generator>Ultimate Google Sitemaps and RSS ' . $this->ggsitemaps_config['ggs_ver'] . ' www.phpBB-SEO.com</generator>' . "\n\t\t" . '<ttl>' . intval(($this->cache_config['rss_cache_max_age'] - ($this->output_data['time'] - $this->output_data['last_mod_time'])) / 60) . '</ttl>';
     if (in_array($this->actions['action'], $this->actions['actions'])) {
         include $this->path_config['module_path'] . 'includes/rss_' . $this->actions['action'] . '.' . $phpEx;
         if ($this->output_data['showstats']) {
             $this->output_data['gen_data'] = sprintf('%.5f', $phpbb_seo->microtime_float() - $this->output_data['microtime']);
             $mem_stats = $this->ggs_mem_usage();
             $this->output_data['data'] .= "\n\t" . '</channel>' . "\n" . '</rss>' . sprintf($this->style_config['stats_genlist'], $this->output_data['gen_data'], $mem_stats, $db->num_queries, $this->output_data['url_sofar']);
         } else {
             $this->output_data['data'] .= "\n\t" . '</channel>' . "\n" . '</rss>';
         }
     } else {
         // We are working on all available files
         $rss_gen_url = $this->path_config['rss_url'] . ($this->mod_r_config['mod_rewrite'] ? "rss" . $this->mod_r_config['extra_params'] . ".xml" . $this->ext_config['gzip_ext_out'] : "rss.{$phpEx}" . (substr($this->mod_r_config['extra_params'], 0, 5) === "&amp;" ? "?" . substr($this->mod_r_config['extra_params'], 5) : ''));
         $chan_title_gen = htmlspecialchars($this->rss_config['sitename'] . $this->rss_config['extra_title']);
         $chan_desc_gen = htmlspecialchars($this->rss_config['site_desc']);
         $rss_link_url = $this->actions['action'] === 'rss' || $this->actions['action'] === 'channels' ? $this->path_config['root_url'] : $this->path_config['phpbb_url'];
         $board_image = sprintf($this->style_config['rsschan_img_tpl'], $chan_title_gen, $this->rss_config['rss_image'], $rss_link_url);
         $chan_time = gmdate('D, d M Y H:i:s \\G\\M\\T', $this->output_data['last_mod_time']);
         if ($this->actions['action'] === 'channels') {
             $rss_list_url = $this->path_config['rss_url'] . ($this->mod_r_config['mod_rewrite'] ? 'channels-rss' . $this->mod_r_config['extra_params'] . '.xml' . $this->ext_config['gzip_ext_out'] : 'rss.' . $phpEx . '?channels' . $this->mod_r_config['extra_params']);
             $this->seo_kill_dupes($rss_list_url);
             $chan_title = htmlspecialchars($this->rss_config['sitename'] . $lang['rss_chan_list'] . $this->rss_config['extra_title']);
             $chan_desc = htmlspecialchars($this->rss_config['site_desc'] . $lang['rss_chan_list']);
             $this->output_data['data'] .= sprintf($this->style_config['rsschan_tpl'], $chan_title, $rss_link_url, $chan_desc . $auth_msg, $chan_time, $board_image);
             $this->output_data['url_sofar']++;
             $this->output_data['data'] .= sprintf($this->style_config['rss_tpl'], $chan_title, $this->path_config['root_url'], $chan_time, $chan_desc, $rss_list_url, htmlspecialchars($this->rss_config['sitename']), $this->path_config['root_url']);
             $this->output_data['url_sofar']++;
         } else {
             $this->seo_kill_dupes($rss_gen_url);
             $this->output_data['data'] .= sprintf($this->style_config['rsschan_tpl'], $chan_title_gen, $rss_link_url, $chan_desc_gen . $auth_msg, $chan_time, $board_image);
             $this->output_data['url_sofar']++;
         }
         $this->output_data['data'] .= sprintf($this->style_config['rss_tpl'], $chan_title_gen, $this->path_config['root_url'], $chan_time, $chan_desc_gen, $rss_gen_url, htmlspecialchars($this->rss_config['sitename']), $this->path_config['root_url']);
         $this->output_data['url_sofar']++;
         // URL limit, we take the last xx items from each feed
         // where xx is the URL limit divided by the number of feeds
         $this->rss_config['rss_url_limit'] = intval($this->rss_config['rss_url_limit'] / $this->actions['file_count']);
         $url_sofar_total = 0;
         $dir = @opendir($this->path_config['module_path'] . 'includes');
         while (($file = @readdir($dir)) !== FALSE) {
             if (preg_match("/^rss_[a-zA-Z0-9_-]+\\." . $phpEx . "\$/", $file)) {
                 include_once $this->path_config['module_path'] . 'includes/' . $file;
                 // Keep total
                 $url_sofar_total = $url_sofar_total + $this->output_data['url_sofar'];
                 // Reset current
                 $this->output_data['url_sofar'] = 0;
             }
         }
         @closedir($dir);
         $this->output_data['url_sofar'] = $url_sofar_total;
         $this->output_data['data'] .= "\n\t" . '</channel>';
         if ($this->output_data['showstats']) {
             $this->output_data['gen_data'] = sprintf('%.5f', $phpbb_seo->microtime_float() - $this->output_data['microtime']);
             $mem_stats = $this->ggs_mem_usage();
             $this->output_data['data'] .= "\n" . '</rss>' . sprintf($this->style_config['stats_genlist'], $this->output_data['gen_data'], $mem_stats, $db->num_queries, $this->output_data['url_sofar']);
         } else {
             $this->output_data['data'] .= "\n" . '</rss>';
         }
     }
     if ($this->rss_config['non_utf8']) {
         $encoding = trim($this->rss_config['rss_charset']);
         if ($encoding === 'auto' && @extension_loaded('mbstring')) {
             $encoding = trim(@mb_strtolower(@mb_internal_encoding()));
         }
         if ($encoding == '' || $encoding === 'auto' || $encoding == 'no value') {
             $encoding = 'iso-8859-1';
         }
         if (!$this->rss_config['use_native_utf8_encode']) {
             // Only inlcude the file if required 15ko is not much but still
             require_once $this->path_config['module_path'] . "includes/utf/utf_tools.{$phpEx}";
             $this->output_data['data'] = utf8_recode($this->output_data['data'], $encoding, $this);
         } else {
             $this->output_data['data'] = utf8_encode($this->output_data['data']);
         }
     }
     return;
 }
/**
* get_match($pattern, $string, $encoding)
* returns properly encoded match from feed
*/
function get_match($pattern, $string, $encoding = 'utf-8')
{
    static $filters = array('<![CDATA[' => '', ']]>' => '');
    $string = strtr($string, $filters);
    preg_match($pattern, $string, $out);
    if (!empty($out[1])) {
        // cdata
        $out[1] = strtr($out[1], $filters);
        if (strtolower($encoding) != 'utf-8') {
            $out[1] = utf8_recode($out[1], $encoding);
        }
        return @html_entity_decode(trim($out[1]), ENT_COMPAT, 'UTF-8');
    } else {
        return '';
    }
}
Beispiel #14
0
*/
define('IN_PHPBB', true);
$phpbb_root_path = defined('PHPBB_ROOT_PATH') ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include $phpbb_root_path . 'common.' . $phpEx;
// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup('search');
// www.phpBB-SEO.com SEO TOOLKIT BEGIN
$clean_request = array('keywords', 'author', 'add_keywords');
foreach ($clean_request as $request) {
    if (!empty($_REQUEST[$request])) {
        $_REQUEST[$request] = rawurldecode($_REQUEST[$request]);
        if (!$phpbb_seo->is_utf8($_REQUEST[$request])) {
            $_REQUEST[$request] = utf8_normalize_nfc(utf8_recode($_REQUEST[$request], 'iso-8859-1'));
        }
    }
}
// www.phpBB-SEO.com SEO TOOLKIT END
// Define initial vars
$mode = request_var('mode', '');
$search_id = request_var('search_id', '');
$start = max(request_var('start', 0), 0);
$post_id = request_var('p', 0);
$topic_id = request_var('t', 0);
$view = request_var('view', '');
$submit = request_var('submit', false);
$keywords = utf8_normalize_nfc(request_var('keywords', '', true));
$add_keywords = utf8_normalize_nfc(request_var('add_keywords', '', true));
$author = request_var('author', '', true);
Beispiel #15
0
/**
* Function for recoding text with the default language
*
* @param string $text text to recode to utf8
*/
function phpbb_set_encoding($text)
{
	$encoding = 'utf8';

	return utf8_recode($text, $encoding);
}
Beispiel #16
0
 public function core_common($event)
 {
     if (empty($this->core->seo_opt['url_rewrite'])) {
         return;
     }
     // this helps fixing several cases of relative links
     define('PHPBB_USE_BOARD_URL_PATH', true);
     $this->start = max(0, $this->request->variable('start', 0));
     switch ($this->core->seo_opt['req_file']) {
         case 'viewforum':
             $this->forum_id = max(0, $this->request->variable('f', 0));
             if (!$this->forum_id) {
                 $this->core->get_forum_id($this->forum_id);
                 if (!$this->forum_id) {
                     // here we need to find out if the uri really was a forum one
                     if (!preg_match('`^.+?\\.' . $this->php_ext . '(\\?.*)?$`', $this->core->seo_path['uri'])) {
                         // request url is rewriten
                         // re-route request to app.php
                         global $phpbb_container;
                         // god save the hax
                         $phpbb_root_path = $this->phpbb_root_path;
                         $phpEx = $this->php_ext;
                         include $phpbb_root_path . 'includes/functions_url_matcher.' . $phpEx;
                         // we need to overwrite couple SERVER variable to simulate direct app.php call
                         // start with scripts
                         $script_fix_list = array('SCRIPT_FILENAME', 'SCRIPT_NAME', 'PHP_SELF');
                         foreach ($script_fix_list as $varname) {
                             if ($this->request->is_set($varname, \phpbb\request\request_interface::SERVER)) {
                                 $value = $this->request->server($varname);
                                 if ($value) {
                                     $value = preg_replace('`^(.*?)viewforum\\.' . $this->php_ext . '((\\?|/).*)?$`', '\\1app.' . $this->php_ext . '\\2', $value);
                                     $this->request->overwrite($varname, $value, \phpbb\request\request_interface::SERVER);
                                 }
                             }
                         }
                         // then fix query strings
                         $qs_fix_list = array('QUERY_STRING', 'REDIRECT_QUERY_STRING');
                         foreach ($qs_fix_list as $varname) {
                             if ($this->request->is_set($varname, \phpbb\request\request_interface::SERVER)) {
                                 $value = $this->request->server($varname);
                                 if ($value) {
                                     $value = preg_replace('`^forum_uri=[^&]*(&amp;|&)start=((&amp;|&).*)?$`i', '', $value);
                                     $this->request->overwrite($varname, $value, \phpbb\request\request_interface::SERVER);
                                 }
                             }
                         }
                         // Start session management
                         $this->user->session_begin();
                         $this->auth->acl($this->user->data);
                         $this->user->setup('app');
                         $http_kernel = $phpbb_container->get('http_kernel');
                         $symfony_request = $phpbb_container->get('symfony_request');
                         $response = $http_kernel->handle($symfony_request);
                         $response->send();
                         $http_kernel->terminate($symfony_request, $response);
                         exit;
                     }
                     if ($this->core->seo_opt['redirect_404_forum']) {
                         $this->core->seo_redirect($this->core->seo_path['phpbb_url']);
                     } else {
                         send_status_line(404, 'Not Found');
                     }
                 } else {
                     $this->request->overwrite('f', (int) $this->forum_id);
                 }
             }
             break;
         case 'viewtopic':
             $this->forum_id = max(0, $this->request->variable('f', 0));
             $this->topic_id = max(0, $this->request->variable('t', 0));
             $this->post_id = max(0, $this->request->variable('p', 0));
             if (!$this->forum_id) {
                 $this->core->get_forum_id($this->forum_id);
                 if ($this->forum_id > 0) {
                     $this->request->overwrite('f', (int) $this->forum_id);
                 }
             }
             $this->hilit_words = $this->request->variable('hilit', '', true);
             if ($this->hilit_words) {
                 $this->hilit_words = rawurldecode($this->hilit_words);
                 if (!$this->core->is_utf8($this->hilit_words)) {
                     $this->hilit_words = utf8_normalize_nfc(utf8_recode($this->hilit_words, 'iso-8859-1'));
                 }
                 $this->request->overwrite('hilit', $this->hilit_words);
             }
             if (!$this->topic_id && !$this->post_id) {
                 if ($this->core->seo_opt['redirect_404_forum']) {
                     if ($this->forum_id && !empty($this->core->seo_url['forum'][$this->forum_id])) {
                         $this->core->seo_redirect(append_sid("{$this->phpbb_root_path}viewforum.{$this->php_ext}", 'f=' . $this->forum_id));
                     } else {
                         $this->core->seo_redirect($this->core->seo_path['phpbb_url']);
                     }
                 } else {
                     send_status_line(404, 'Not Found');
                 }
             }
             break;
     }
 }