Index: trunk/CHANGELOG
===================================================================
--- trunk/CHANGELOG	(revision 441)
+++ trunk/CHANGELOG	(revision 442)
@@ -36,6 +36,11 @@
 27-Dec-2006 Matthias Gallas
 #	Fixed form modul stores empty records
 ------------------------------------- 2.6.6 -------------------------------------
+01-Apr-2007 Matthias Gallas
+#	Fixed issues with some languages when UTF8 is used.	Removed all htmlentites
+	from the code (revoked changeset 396) and added new functions instead. Adapted the
+	search and the highlighting to use the new functions. With this changes WB can now
+	be used with charset UTF8 for all languages.
 12-Mar-2007 Matthias Gallas
 +	Added multilingual support to search
 03-Mar-2007 Matthias Gallas
Index: trunk/wb/search/search.php
===================================================================
--- trunk/wb/search/search.php	(revision 441)
+++ trunk/wb/search/search.php	(revision 442)
@@ -28,6 +28,9 @@
 	exit(0);
 }
 
+// Include the WB functions file
+require_once(WB_PATH.'/framework/functions.php');
+
 // Check if search is enabled
 if(SHOW_SEARCH != true) {
 	echo $TEXT['SEARCH'].' '.$TEXT['DISABLED'];
@@ -55,13 +58,13 @@
 		// Double backslashes (mySQL needs doubly escaped backslashes in LIKE comparisons)
 		$string = addslashes($wb->escape_backslashes($original_string));
 		// convert a copy of $string to HTML-ENTITIES
-		$string_entities=mb_convert_encoding($string, 'UTF-8', 'HTML-ENTITIES');
-		$string_entities=htmlspecialchars($string_entities,ENT_QUOTES);
-		$string_entities=mb_convert_encoding($string_entities, 'HTML-ENTITIES', 'UTF-8');
+		$string_entities = umlauts_to_entities($string);
 		// and do some convertion to both
 		require(WB_PATH.'/search/search_convert.php');
-		$string=strtr($string,$string_conv);
-		$string_entities=strtr($string_entities,$string_entities_conv);
+		if(strcmp(DEFAULT_CHARSET, "iso-8859-1") == 0) {
+			$string=strtr($string,$string_conv_iso88591);
+			$string_entities=strtr($string_entities,$string_entities_conv_iso88591);
+		}
 		$search_string = $string_entities;
 	} else {
 		$string = '';
@@ -181,9 +184,16 @@
 				$link = page_link($page['link']);
 				
 				//Add search string for highlighting
-				$sstring = implode(" ", array_merge($string,$string_entities));
-				//$link = $link."?searchresult=1&amp;sstring=".$sstring;
-				$link = $link."?searchresult=1&amp;sstring=".urlencode($sstring);
+				if ($match!='exact') {
+					$sorted=array_merge($string,$string_entities);
+					sort($sorted);
+					$sstring = implode(" ", $sorted);
+					$link = $link."?searchresult=1&amp;sstring=".urlencode($sstring);
+				}
+				else {
+					$sstring = strtr($string[0], " ", "_")." ".strtr($string_entities[0], " ","_");
+					$link = $link."?searchresult=2&amp;sstring=".urlencode($sstring);
+				}
 				
 				// Set vars to be replaced by values
 				$vars = array('[LINK]', '[TITLE]', '[DESCRIPTION]', '[USERNAME]','[DISPLAY_NAME]','[DATE]','[TIME]','[TEXT_LAST_UPDATED_BY]','[TEXT_ON]');
@@ -268,9 +278,16 @@
 										$link = page_link($page[$fields['link']]);
 										
 										//Add search string for highlighting
-										$sstring = implode(" ", array_merge($string,$string_entities));
-										//$link = $link."?searchresult=1&amp;sstring=".$sstring;
-										$link = $link."?searchresult=1&amp;sstring=".urlencode($sstring);
+										if ($match!='exact') {
+											$sorted=array_merge($string,$string_entities);
+											sort($sorted);
+											$sstring = implode(" ", $sorted);
+											$link = $link."?searchresult=1&amp;sstring=".urlencode($sstring);
+										}
+										else {
+											$sstring = strtr($string[0], " ", "_")." ".strtr($string_entities[0], " ","_");
+											$link = $link."?searchresult=2&amp;sstring=".urlencode($sstring);
+										}
 										
 										// Set vars to be replaced by values
 										$vars = array('[LINK]', '[TITLE]', '[DESCRIPTION]', '[USERNAME]','[DISPLAY_NAME]','[DATE]','[TIME]','[TEXT_LAST_UPDATED_BY]','[TEXT_ON]');
Index: trunk/wb/search/search_convert.php
===================================================================
--- trunk/wb/search/search_convert.php	(revision 441)
+++ trunk/wb/search/search_convert.php	(revision 442)
@@ -33,7 +33,7 @@
 }
 
 //for Xinha, (htmlarea)
-$string_conv=array(
+$string_conv_iso88591=array(
 	"Š"=>"&Scaron;","š"=>"&scaron;","Œ"=>"&OElig;","œ"=>"&oelig;","Ÿ"=>"&Yuml;",
 	">"=>"&gt;","<"=>"&lt;",
 	"„"=>"&bdquo;","•"=>"&bull;","ˆ"=>"&circ;","&#925;"=>"&Nu;","&#957;"=>"&nu;",
@@ -61,7 +61,7 @@
 );
 
 //for fckeditor, (tiny_mce)
-$string_entities_conv=array(
+$string_entities_conv_iso88591=array(
 	"&#140;"=>"&OElig;","&#156;"=>"&oelig;","&#138;"=>"&Scaron;","&#154;"=>"&scaron;",
 	"&#159;"=>"&Yuml;",
 	"&#152;"=>"&tilde;","&upsih;"=>"&#978;","&#149;"=>"&bull;","&#153;"=>"&trade;",
Index: trunk/wb/admin/pages/settings.php
===================================================================
--- trunk/wb/admin/pages/settings.php	(revision 441)
+++ trunk/wb/admin/pages/settings.php	(revision 442)
@@ -76,8 +76,8 @@
 $template->set_block('page', 'main_block', 'main');
 $template->set_var(array(
 								'PAGE_ID' => $results_array['page_id'],
-								'PAGE_TITLE' => (htmlentities($results_array['page_title'])),
-								'MENU_TITLE' => (htmlentities($results_array['menu_title'])),
+								'PAGE_TITLE' => ($results_array['page_title']),
+								'MENU_TITLE' => ($results_array['menu_title']),
 								'DESCRIPTION' => ($results_array['description']),
 								'KEYWORDS' => ($results_array['keywords']),
 								'MODIFIED_BY' => $user['display_name'],
@@ -249,7 +249,7 @@
 			for($i = 1; $i <= $page['level']; $i++) { $title_prefix .= ' - '; }
 			$template->set_var(array(
 											'ID' => $page['page_id'],
-											'TITLE' => ($title_prefix.htmlentities($page['page_title']))
+											'TITLE' => ($title_prefix.$page['page_title'])
 											)
 									);
 			if($results_array['parent'] == $page['page_id']) {
Index: trunk/wb/admin/pages/index.php
===================================================================
--- trunk/wb/admin/pages/index.php	(revision 441)
+++ trunk/wb/admin/pages/index.php	(revision 442)
@@ -166,15 +166,15 @@
 				</td>
 				<?php if($admin->get_permission('pages_modify') == true AND $can_modify == true) { ?>
 				<td>
-					<a href="<?php echo ADMIN_URL; ?>/pages/modify.php?page_id=<?php echo $page['page_id']; ?>" title="<?php echo $TEXT['MODIFY']; ?>"><?php echo (htmlentities($page['page_title'])); ?></a>				
+					<a href="<?php echo ADMIN_URL; ?>/pages/modify.php?page_id=<?php echo $page['page_id']; ?>" title="<?php echo $TEXT['MODIFY']; ?>"><?php echo ($page['page_title']); ?></a>				
 				</td>
 				<?php } else { ?>
 				<td>
-					<?php echo (htmlentities($page['page_title'])); ?>
+					<?php echo ($page['page_title']); ?>
 				</td>
 				<?php } ?>
 				<td align="left" width="232">
-					<font color="#999999"><?php echo (htmlentities($page['menu_title'])); ?></font>
+					<font color="#999999"><?php echo ($page['menu_title']); ?></font>
 				</td>
 				<td align="center" valign="middle" width="90">
 				<?php if($page['visibility'] == 'public') { ?>
@@ -462,7 +462,7 @@
 			for($i = 1; $i <= $page['level']; $i++) { $title_prefix .= ' - '; }
 				$template->set_var(array(
 												'ID' => $page['page_id'],
-												'TITLE' => ($title_prefix.htmlentities($page['page_title']))
+												'TITLE' => ($title_prefix.$page['page_title'])
 												)
 										);
 				if($can_modify == true) {
Index: trunk/wb/admin/pages/trash.php
===================================================================
--- trunk/wb/admin/pages/trash.php	(revision 441)
+++ trunk/wb/admin/pages/trash.php	(revision 442)
@@ -141,21 +141,21 @@
 				</td>
 				<?php if($admin->get_permission('pages_modify') == true AND $can_modify == true AND $page['visibility'] != 'heading') { ?>
 				<td>
-					<a href="<?php echo ADMIN_URL; ?>/pages/modify.php?page_id=<?php echo $page['page_id']; ?>" title="<?php echo $TEXT['MODIFY']; ?>"><?php echo (htmlentities($page['page_title'])); ?></a>
+					<a href="<?php echo ADMIN_URL; ?>/pages/modify.php?page_id=<?php echo $page['page_id']; ?>" title="<?php echo $TEXT['MODIFY']; ?>"><?php echo ($page['page_title']); ?></a>
 				</td>
 				<?php } else { ?>
 				<td>
 					<?php
 					if($page['visibility'] != 'heading') {
-						echo (htmlentities($page['page_title']));
+						echo ($page['page_title']);
 					} else {
-						echo '<b>'.(htmlentities($page['page_title'])).'</b>';
+						echo '<b>'.($page['page_title']).'</b>';
 					}
 					?>
 				</td>
 				<?php } ?>
 				<td align="left" width="232">
-					<font color="#999999"><?php echo htmlentities($page['menu_title']); ?></font>
+					<font color="#999999"><?php echo $page['menu_title']; ?></font>
 				</td>
 				<td align="right" valign="middle" width="30" style="padding-right: 20px;">
 				<?php if($page['visibility'] == 'public') { ?>
Index: trunk/wb/admin/pages/settings2.php
===================================================================
--- trunk/wb/admin/pages/settings2.php	(revision 441)
+++ trunk/wb/admin/pages/settings2.php	(revision 442)
@@ -41,7 +41,9 @@
 
 // Get values
 $page_title = $admin->add_slashes($admin->get_post_escaped('page_title'));
+$page_title = my_htmlspecialchars($page_title);
 $menu_title = $admin->add_slashes($admin->get_post_escaped('menu_title'));
+$menu_title = my_htmlspecialchars($menu_title);
 $description = $admin->add_slashes($admin->get_post('description'));
 $keywords = $admin->add_slashes($admin->get_post('keywords'));
 $parent = $admin->get_post('parent');
Index: trunk/wb/admin/pages/sections.php
===================================================================
--- trunk/wb/admin/pages/sections.php	(revision 441)
+++ trunk/wb/admin/pages/sections.php	(revision 442)
@@ -138,7 +138,7 @@
 	</td>
 	<td align="right">
 		<?php echo $TEXT['CURRENT_PAGE']; ?>: 
-		<b><?php echo (htmlentities($results_array['page_title'])); ?></b>
+		<b><?php echo ($results_array['page_title']); ?></b>
 		-
 		<a href="<?php echo ADMIN_URL; ?>/pages/modify.php?page_id=<?php echo $page_id; ?>"><?php echo $HEADING['MODIFY_PAGE']; ?></a>
 		-
Index: trunk/wb/admin/pages/modify.php
===================================================================
--- trunk/wb/admin/pages/modify.php	(revision 441)
+++ trunk/wb/admin/pages/modify.php	(revision 442)
@@ -60,7 +60,7 @@
 $template->set_block('page', 'main_block', 'main');
 $template->set_var(array(
 								'PAGE_ID' => $results_array['page_id'],
-								'PAGE_TITLE' => (htmlentities($results_array['page_title'])),
+								'PAGE_TITLE' => ($results_array['page_title']),
 								'MODIFIED_BY' => $user['display_name'],
 								'MODIFIED_BY_USERNAME' => $user['username'],
 								'MODIFIED_WHEN' => $modified_ts,
Index: trunk/wb/admin/pages/add.php
===================================================================
--- trunk/wb/admin/pages/add.php	(revision 441)
+++ trunk/wb/admin/pages/add.php	(revision 442)
@@ -33,6 +33,7 @@
 
 // Get values
 $title = $admin->add_slashes($admin->get_post_escaped('title'));
+$title = my_htmlspecialchars($title);
 $module = $admin->get_post('type');
 $parent = $admin->get_post('parent');
 $visibility = $admin->get_post('visibility');
Index: trunk/wb/framework/convert.php
===================================================================
--- trunk/wb/framework/convert.php	(revision 441)
+++ trunk/wb/framework/convert.php	(revision 442)
@@ -25,8 +25,7 @@
 
 /*
 Character Conversion file
-This file helps convert possible error-causing
-characters to equivalent non-error-causing ones
+to convert some entities to there 7bit equivalents
 */
 if(!defined('WB_URL')) {
 	header('Location: ../index.php');
@@ -34,41 +33,234 @@
 }
 
 $conversion_array = array(
-'Ã€'=>'A','ï¿½?'=>'A','Ã‚'=>'A','Ãƒ'=>'A','Ã„'=>'Ae', '&Auml;'=>'A',
-'Ã…'=>'A','Ä€'=>'A','Ä„'=>'A','Ä‚'=>'A', 'Ã†'=>'Ae',
-'Ã‡'=>'C','Ä†'=>'C','ÄŒ'=>'C','Äˆ'=>'C','ÄŠ'=>'C',
-'ÄŽ'=>'D','ï¿½?'=>'D','ï¿½?'=>'D',
-'Ãˆ'=>'E','Ã‰'=>'E','ÃŠ'=>'E','Ã‹'=>'E','Ä’'=>'E',
-'Ä˜'=>'E','Äš'=>'E','Ä”'=>'E','Ä–'=>'E',
-'Äœ'=>'G','Äž'=>'G','Ä '=>'G','Ä¢'=>'G',
-'Ä¤'=>'H','Ä¦'=>'H',
-'ÃŒ'=>'I','ï¿½?'=>'I','ÃŽ'=>'I','ï¿½?'=>'I','Äª'=>'I', 'Ä¨'=>'I','Ä¬'=>'I','Ä®'=>'I','Ä°'=>'I',
-'Ä²'=>'IJ','Ä´'=>'J','Ä¶'=>'K',
-'ï¿½?'=>'K','Ä½'=>'K','Ä¹'=>'K','Ä»'=>'K','Ä¿'=>'K',
-'Ã‘'=>'N','Åƒ'=>'N','Å‡'=>'N','Å…'=>'N','ÅŠ'=>'N',
-'Ã’'=>'O','Ã“'=>'O','Ã”'=>'O','Ã•'=>'O','Ã–'=>'Oe',
-'&Ouml;'=>'Oe', 'Ã˜'=>'O','ÅŒ'=>'O','ï¿½?'=>'O','ÅŽ'=>'O',
-'Å’'=>'OE', 'Å”'=>'R','Å˜'=>'R','Å–'=>'R',
-'Åš'=>'S','Å '=>'S','Åž'=>'S','Åœ'=>'S','È˜'=>'S',
-'Å¤'=>'T','Å¢'=>'T','Å¦'=>'T','Èš'=>'T',
-'Ã™'=>'U','Ãš'=>'U','Ã›'=>'U','Ãœ'=>'Ue','Åª'=>'U',
-'&Uuml;'=>'Ue', 'Å®'=>'U','Å°'=>'U','Å¬'=>'U','Å¨'=>'U','Å²'=>'U',
-'Å´'=>'W', 'ï¿½?'=>'Y','Å¶'=>'Y','Å¸'=>'Y', 'Å¹'=>'Z','Å½'=>'Z','Å»'=>'Z',
-'Ãž'=>'T','Ãž'=>'T', 'Ã '=>'a','Ã¡'=>'a','Ã¢'=>'a','Ã£'=>'a','Ã¤'=>'ae',
-'&auml;'=>'ae', 'Ã¥'=>'a','ï¿½?'=>'a','Ä…'=>'a','Äƒ'=>'a',
-'Ã¦'=>'ae', 'Ã§'=>'c','Ä‡'=>'c','ï¿½?'=>'c','Ä‰'=>'c','Ä‹'=>'c',
-'ï¿½?'=>'d','Ä‘'=>'d','Ã°'=>'d', 'Ã¨'=>'e','Ã©'=>'e','Ãª'=>'e','Ã«'=>'e','Ä“'=>'e',
-'Ä™'=>'e','Ä›'=>'e','Ä•'=>'e','Ä—'=>'e', 'Æ’'=>'f',
-'ï¿½?'=>'g','ÄŸ'=>'g','Ä¡'=>'g','Ä£'=>'g', 'Ä¥'=>'h','Ä§'=>'h',
-'Ã¬'=>'i','Ã­'=>'i','Ã®'=>'i','Ã¯'=>'i','Ä«'=>'i', 'Ä©'=>'i','Ä­'=>'i','Ä¯'=>'i','Ä±'=>'i',
-'Ä³'=>'ij', 'Äµ'=>'j', 'Ä·'=>'k','Ä¸'=>'k', 'Å‚'=>'l','Ä¾'=>'l','Äº'=>'l','Ä¼'=>'l','Å€'=>'l',
-'Ã±'=>'n','Å„'=>'n','Åˆ'=>'n','Å†'=>'n','Å‰'=>'n', 'Å‹'=>'n',
-'Ã²'=>'o','Ã³'=>'o','Ã´'=>'o','Ãµ'=>'o','Ã¶'=>'oe', '&ouml;'=>'oe',
-'Ã¸'=>'o','ï¿½?'=>'o','Å‘'=>'o','ï¿½?'=>'o', 'Å“'=>'oe', 'Å•'=>'r','Å™'=>'r','Å—'=>'r',
-'Å¡'=>'s', 'Ã¹'=>'u','Ãº'=>'u','Ã»'=>'u','Ã¼'=>'ue','Å«'=>'u', '&uuml;'=>'ue',
-'Å¯'=>'u','Å±'=>'u','Å­'=>'u','Å©'=>'u','Å³'=>'u', 'Åµ'=>'w',
-'Ã½'=>'y','Ã¿'=>'y','Å·'=>'y', 'Å¾'=>'z','Å¼'=>'z','Åº'=>'z', 'Ã¾'=>'t', 'ÃŸ'=>'ss', 'Å¿'=>'ss',
-'Ã¤'=>'ae', 'Ã¶'=>'oe', 'Ã¼'=>'ue', 'Ã„'=>'Ae', 'Ã–'=>'Oe', 'Ãœ'=>'Ue'
+
+//### LATIN
+'&Aacute;'=>'A','&aacute;'=>'a','&Acirc;'=>'A','&acirc;'=>'a','&AElig;'=>'AE','&aelig;'=>'ae','&Agrave;'=>'A','&agrave;'=>'a','&Aring;'=>'A','&aring;'=>'a','&Atilde;'=>'A','&atilde;'=>'a','&Auml;'=>'AE','&auml;'=>'ae',
+'&Ccedil;'=>'C','&ccedil;'=>'c',
+'&Eacute;'=>'E','&eacute;'=>'e','&Ecirc;'=>'E','&ecirc;'=>'e','&Egrave;'=>'E','&egrave;'=>'e','&Euml;'=>'E','&euml;'=>'e',
+'&Iacute;'=>'I','&iacute;'=>'i','&Icirc;'=>'I','&icirc;'=>'i','&Igrave;'=>'I','&igrave;'=>'i','&Iuml;'=>'I','&iuml;'=>'i',
+'&Ntilde;'=>'N','&ntilde;'=>'n',
+'&Oacute;'=>'O','&oacute;'=>'o','&Ocirc;'=>'O','&ocirc;'=>'o','&OElig;'=>'OE','&oelig;'=>'oe','&Ograve;'=>'O','&ograve;'=>'o','&Otilde;'=>'O','&otilde;'=>'o','&Ouml;'=>'OE','&ouml;'=>'oe',
+'&Scaron;'=>'S','&scaron;'=>'s',
+'&szlig;'=>'ss',
+'&Uacute;'=>'U','&uacute;'=>'u','&Ucirc;'=>'U','&ucirc;'=>'u','&Ugrave;'=>'U','&ugrave;'=>'u','&Uuml;'=>'UE','&uuml;'=>'ue',
+'&Yacute;'=>'Y','&yacute;'=>'y','&Yuml;'=>'Y','&yuml;'=>'y',
+'&#138;'=>'S',
+'&#140;'=>'OE','&#156;'=>'oe',
+'&#154;'=>'s',
+'&#159;'=>'Y',
+'&copy;'=>'(c)','&reg;'=>'(r)','&ETH;'=>'D','&times;'=>'x','&Oslash;'=>'O','&THORN;'=>'TH','&eth;'=>'d','&oslash;'=>'o','&thorn;'=>'th',
+
+// latin extended-A
+'&#256;'=>'A','&#257;'=>'a','&#258;'=>'A','&#259;'=>'a','&#260;'=>'A','&#261;'=>'a',
+'&#262;'=>'C','&#263;'=>'c','&#264;'=>'C','&#265;'=>'c','&#269;'=>'c','&#268;'=>'C','&#267;'=>'c','&#266;'=>'C',
+'&#273;'=>'d','&#272;'=>'D','&#271;'=>'d','&#270;'=>'D',
+'&#275;'=>'e','&#274;'=>'E','&#276;'=>'E','&#277;'=>'e','&#278;'=>'E','&#279;'=>'e','&#280;'=>'E','&#281;'=>'e','&#282;'=>'E','&#283;'=>'e',
+'&#284;'=>'G','&#285;'=>'g','&#286;'=>'G','&#287;'=>'g','&#288;'=>'G','&#289;'=>'g','&#290;'=>'G','&#291;'=>'g',
+'&#292;'=>'H','&#293;'=>'h','&#294;'=>'H','&#295;'=>'h',
+'&#296;'=>'I','&#297;'=>'i','&#298;'=>'I','&#299;'=>'i','&#300;'=>'I','&#301;'=>'i','&#302;'=>'I','&#303;'=>'i','&#304;'=>'I','&#305;'=>'i',
+'&#306;'=>'IJ','&#307;'=>'ij',
+'&#308;'=>'J','&#309;'=>'j',
+'&#310;'=>'K','&#311;'=>'k','&#312;'=>'k',
+'&#313;'=>'L','&#314;'=>'l','&#315;'=>'L','&#316;'=>'l','&#317;'=>'L','&#318;'=>'l','&#319;'=>'L','&#320;'=>'l','&#321;'=>'L','&#322;'=>'l',
+'&#323;'=>'N','&#324;'=>'n','&#325;'=>'N','&#326;'=>'n','&#327;'=>'N','&#328;'=>'n','&#329;'=>'n','&#330;'=>'N','&#331;'=>'n',
+'&#332;'=>'O','&#333;'=>'o','&#334;'=>'O','&#335;'=>'o','&#336;'=>'O','&#337;'=>'o',
+'&#340;'=>'R','&#341;'=>'r','&#342;'=>'R','&#343;'=>'r','&#344;'=>'R','&#345;'=>'r',
+'&#346;'=>'S','&#347;'=>'s','&#348;'=>'S','&#349;'=>'s','&#350;'=>'S','&#351;'=>'s',
+'&#354;'=>'T','&#355;'=>'t','&#356;'=>'T','&#357;'=>'t','&#358;'=>'T','&#359;'=>'t',
+'&#360;'=>'U','&#361;'=>'u','&#362;'=>'U','&#363;'=>'u','&#364;'=>'U','&#365;'=>'u','&#366;'=>'U','&#367;'=>'u','&#368;'=>'U','&#369;'=>'u','&#370;'=>'U','&#371;'=>'u',
+'&#372;'=>'W','&#373;'=>'w',
+'&#374;'=>'Y','&#375;'=>'y','&#376;'=>'Y',
+'&#377;'=>'Z','&#378;'=>'z','&#379;'=>'Z','&#380;'=>'z','&#381;'=>'Z','&#382;'=>'z',
+'&#383;'=>'s',
+'&#64256;'=>'ff','&#64257;'=>'fi','&#64258;'=>'fl','&#64259;'=>'ffi','&#64260;'=>'ffl',
+'&#64261;'=>'st',
+'&#64262;'=>'st',
+// latin extended-b
+'&#384;'=>'b','&#385;'=>'B','&#386;'=>'B','&#387;'=>'b','&#388;'=>'6','&#389;'=>'6',
+'&#390;'=>'O','&#391;'=>'C','&#392;'=>'c','&#393;'=>'D','&#394;'=>'D','&#395;'=>'D',
+'&#396;'=>'d','&#397;'=>'d','&#398;'=>'E','&#399;'=>'e','&#400;'=>'E','&#401;'=>'F',
+'&fnof;'=>'f','&#403;'=>'G','&#404;'=>'G','&#405;'=>'hw','&#406;'=>'I','&#407;'=>'I',
+'&#408;'=>'K','&#409;'=>'k','&#410;'=>'l','&#411;'=>'l','&#412;'=>'M','&#413;'=>'N',
+'&#414;'=>'n','&#415;'=>'O','&#416;'=>'O','&#417;'=>'o','&#418;'=>'OI','&#419;'=>'oi',
+'&#420;'=>'P','&#421;'=>'p','&#422;'=>'YR','&#423;'=>'2','&#424;'=>'2','&#425;'=>'ESH',
+'&#426;'=>'esh','&#427;'=>'t','&#428;'=>'T','&#429;'=>'t','&#430;'=>'T','&#431;'=>'U',
+'&#432;'=>'u','&#433;'=>'V','&#434;'=>'v','&#435;'=>'Y','&#436;'=>'y','&#437;'=>'Z',
+'&#438;'=>'z','&#439;'=>'EZH','&#440;'=>'EZH','&#441;'=>'ezh','&#442;'=>'ezh','&#443;'=>'2',
+'&#444;'=>'5','&#445;'=>'5','&#446;'=>'-','&#447;'=>'w','&#448;'=>'-','&#449;'=>'-',
+'&#450;'=>'-','&#451;'=>'-','&#452;'=>'DZ','&#453;'=>'DZ','&#454;'=>'dz','&#455;'=>'LJ',
+'&#456;'=>'Lj','&#457;'=>'lj','&#458;'=>'NJ','&#459;'=>'Nj','&#460;'=>'nj','&#461;'=>'A',
+'&#462;'=>'a','&#463;'=>'I','&#464;'=>'i','&#465;'=>'O','&#466;'=>'o','&#467;'=>'U',
+'&#468;'=>'u','&#469;'=>'U','&#470;'=>'u','&#471;'=>'U','&#472;'=>'u','&#473;'=>'U',
+'&#474;'=>'u','&#475;'=>'U','&#476;'=>'u','&#477;'=>'e','&#478;'=>'A','&#479;'=>'a',
+'&#480;'=>'A','&#481;'=>'a','&#482;'=>'AE','&#483;'=>'ae','&#484;'=>'G','&#485;'=>'g',
+'&#486;'=>'G','&#487;'=>'g','&#488;'=>'K','&#489;'=>'k','&#490;'=>'O','&#491;'=>'o',
+'&#492;'=>'O','&#493;'=>'o','&#494;'=>'EZH','&#495;'=>'ezh','&#496;'=>'j','&#497;'=>'DZ',
+'&#498;'=>'Dz','&#499;'=>'dz','&#500;'=>'G','&#501;'=>'g','&#502;'=>'HW','&#503;'=>'W',
+'&#504;'=>'N','&#505;'=>'n','&#506;'=>'A','&#507;'=>'a','&#508;'=>'AE','&#509;'=>'ae',
+'&#510;'=>'O','&#511;'=>'o','&#512;'=>'A','&#513;'=>'a','&#514;'=>'A','&#515;'=>'a',
+'&#516;'=>'E','&#517;'=>'e','&#518;'=>'E','&#519;'=>'e','&#520;'=>'I','&#521;'=>'i',
+'&#522;'=>'I','&#523;'=>'i','&#524;'=>'O','&#525;'=>'o','&#526;'=>'O','&#527;'=>'o',
+'&#528;'=>'R','&#529;'=>'r','&#530;'=>'R','&#531;'=>'r','&#532;'=>'U','&#533;'=>'u',
+'&#534;'=>'U','&#535;'=>'u','&#536;'=>'S','&#537;'=>'s','&#538;'=>'T','&#539;'=>'t',
+'&#540;'=>'Y','&#541;'=>'y','&#542;'=>'H','&#543;'=>'h','&#544;'=>'n','&#545;'=>'d',
+'&#546;'=>'OU','&#547;'=>'ou','&#548;'=>'Z','&#549;'=>'z','&#550;'=>'A','&#551;'=>'a',
+'&#552;'=>'E','&#553;'=>'e','&#554;'=>'O','&#555;'=>'o','&#556;'=>'O','&#557;'=>'o',
+'&#558;'=>'O','&#559;'=>'o','&#560;'=>'O','&#561;'=>'o','&#562;'=>'Y','&#563;'=>'y',
+'&#564;'=>'l','&#565;'=>'n','&#566;'=>'t','&#567;'=>'j','&#568;'=>'db','&#569;'=>'qp',
+'&#570;'=>'A','&#571;'=>'C','&#572;'=>'c','&#573;'=>'L','&#574;'=>'T','&#575;'=>'s',
+'&#576;'=>'z','&#577;'=>'-',
+// latin extended additional
+'&#7680;'=>'A','&#7681;'=>'a',
+'&#7682;'=>'B','&#7683;'=>'b','&#7684;'=>'B','&#7685;'=>'b','&#7686;'=>'B','&#7687;'=>'b',
+'&#7688;'=>'C','&#7689;'=>'c',
+'&#7690;'=>'D','&#7691;'=>'d','&#7692;'=>'D','&#7693;'=>'d','&#7694;'=>'D','&#7695;'=>'d','&#7696;'=>'D','&#7697;'=>'d','&#7698;'=>'D','&#7699;'=>'d',
+'&#7700;'=>'E','&#7701;'=>'e','&#7702;'=>'E','&#7703;'=>'e','&#7704;'=>'E','&#7705;'=>'e','&#7706;'=>'E','&#7707;'=>'e','&#7708;'=>'E','&#7709;'=>'e',
+'&#7710;'=>'F','&#7711;'=>'f',
+'&#7712;'=>'G','&#7713;'=>'g',
+'&#7714;'=>'H','&#7715;'=>'h','&#7716;'=>'H','&#7717;'=>'h','&#7718;'=>'H','&#7719;'=>'h','&#7720;'=>'H','&#7721;'=>'h','&#7722;'=>'H','&#7723;'=>'h',
+'&#7724;'=>'I','&#7725;'=>'i','&#7726;'=>'I','&#7727;'=>'i',
+'&#7728;'=>'K','&#7729;'=>'k','&#7730;'=>'K','&#7731;'=>'k','&#7732;'=>'K','&#7733;'=>'k',
+'&#7734;'=>'L','&#7735;'=>'l','&#7736;'=>'L','&#7737;'=>'l','&#7738;'=>'L','&#7739;'=>'l','&#7740;'=>'L','&#7741;'=>'l',
+'&#7742;'=>'M','&#7743;'=>'m','&#7744;'=>'M','&#7745;'=>'m','&#7746;'=>'M','&#7747;'=>'m',
+'&#7748;'=>'N','&#7749;'=>'n','&#7750;'=>'N','&#7751;'=>'n','&#7752;'=>'N','&#7753;'=>'n','&#7754;'=>'N','&#7755;'=>'n',
+'&#7756;'=>'O','&#7757;'=>'o','&#7758;'=>'O','&#7759;'=>'o','&#7760;'=>'O','&#7761;'=>'o','&#7762;'=>'O','&#7763;'=>'o',
+'&#7764;'=>'P','&#7765;'=>'p','&#7766;'=>'P','&#7767;'=>'p',
+'&#7768;'=>'R','&#7769;'=>'r','&#7770;'=>'R','&#7771;'=>'r','&#7772;'=>'R','&#7773;'=>'r','&#7774;'=>'R','&#7775;'=>'r',
+'&#7776;'=>'S','&#7777;'=>'s','&#7778;'=>'S','&#7779;'=>'s','&#7780;'=>'S','&#7781;'=>'s','&#7782;'=>'S','&#7783;'=>'s','&#7784;'=>'S','&#7785;'=>'s',
+'&#7786;'=>'T','&#7787;'=>'t','&#7788;'=>'T','&#7789;'=>'t','&#7790;'=>'T','&#7791;'=>'t','&#7792;'=>'T','&#7793;'=>'t',
+'&#7794;'=>'U','&#7795;'=>'u','&#7796;'=>'U','&#7797;'=>'u','&#7798;'=>'U','&#7799;'=>'u','&#7800;'=>'U','&#7801;'=>'u','&#7802;'=>'U','&#7803;'=>'u',
+'&#7804;'=>'V','&#7805;'=>'v','&#7806;'=>'V','&#7807;'=>'v',
+'&#7808;'=>'W','&#7809;'=>'w','&#7810;'=>'W','&#7811;'=>'w','&#7812;'=>'W','&#7813;'=>'w','&#7814;'=>'W','&#7815;'=>'w','&#7816;'=>'W','&#7817;'=>'w',
+'&#7818;'=>'X','&#7819;'=>'x','&#7820;'=>'X','&#7821;'=>'x',
+'&#7822;'=>'Y','&#7823;'=>'y',
+'&#7824;'=>'Z','&#7825;'=>'z','&#7826;'=>'Z','&#7827;'=>'z','&#7828;'=>'Z','&#7829;'=>'z',
+'&#7830;'=>'h',
+'&#7831;'=>'t',
+'&#7832;'=>'w',
+'&#7833;'=>'y',
+'&#7834;'=>'a',
+'&#7835;'=>'f',
+'&#7840;'=>'A','&#7841;'=>'a','&#7842;'=>'A','&#7843;'=>'a','&#7844;'=>'A','&#7845;'=>'a','&#7846;'=>'A','&#7847;'=>'a','&#7848;'=>'A','&#7849;'=>'a',
+'&#7850;'=>'A','&#7851;'=>'a','&#7852;'=>'A','&#7853;'=>'a','&#7854;'=>'A','&#7855;'=>'a','&#7856;'=>'A','&#7857;'=>'a','&#7858;'=>'A','&#7859;'=>'a','&#7860;'=>'A','&#7861;'=>'a','&#7862;'=>'A','&#7863;'=>'a',
+'&#7864;'=>'E','&#7865;'=>'e','&#7866;'=>'E','&#7867;'=>'e','&#7868;'=>'E','&#7869;'=>'e','&#7870;'=>'E','&#7871;'=>'e','&#7872;'=>'E','&#7873;'=>'e','&#7874;'=>'E','&#7875;'=>'e','&#7876;'=>'E','&#7877;'=>'e','&#7878;'=>'E','&#7879;'=>'e',
+'&#7880;'=>'I','&#7881;'=>'i','&#7882;'=>'I','&#7883;'=>'i',
+'&#7884;'=>'O','&#7885;'=>'o','&#7886;'=>'O','&#7887;'=>'o','&#7888;'=>'O','&#7889;'=>'o','&#7890;'=>'O','&#7891;'=>'o','&#7892;'=>'O','&#7893;'=>'o','&#7894;'=>'O','&#7895;'=>'o',
+'&#7896;'=>'O','&#7897;'=>'o','&#7898;'=>'O','&#7899;'=>'o','&#7900;'=>'O','&#7901;'=>'o','&#7902;'=>'O','&#7903;'=>'o','&#7904;'=>'O','&#7905;'=>'o','&#7906;'=>'O','&#7907;'=>'o',
+'&#7908;'=>'U','&#7909;'=>'u','&#7910;'=>'U','&#7911;'=>'u','&#7912;'=>'U','&#7913;'=>'u','&#7914;'=>'U','&#7915;'=>'u','&#7916;'=>'U','&#7917;'=>'u','&#7918;'=>'U','&#7919;'=>'u','&#7920;'=>'U','&#7921;'=>'u',
+'&#7922;'=>'Y','&#7923;'=>'y','&#7924;'=>'Y','&#7925;'=>'y','&#7926;'=>'Y','&#7927;'=>'y','&#7928;'=>'Y','&#7929;'=>'y',
+
+//### CYRILLIC (transliteration following iso 9:1995)
+'&#1040;'=>'A','&#1072;'=>'a',
+'&#1232;'=>'A','&#1233;'=>'a',
+'&#1234;'=>'A','&#1235;'=>'a',
+'&#1240;'=>'A','&#1241;'=>'a',
+'&#1041;'=>'B','&#1073;'=>'b',
+'&#1042;'=>'V','&#1074;'=>'v',
+'&#1043;'=>'G','&#1075;'=>'g',
+'&#1168;'=>'G','&#1169;'=>'g',
+'&#1172;'=>'G','&#1173;'=>'g',
+'&#1170;'=>'G','&#1171;'=>'g',
+'&#1044;'=>'D','&#1076;'=>'d',
+'&#1026;'=>'D','&#1106;'=>'d',
+'&#1027;'=>'G','&#1107;'=>'g',
+'&#1045;'=>'E','&#1077;'=>'e',
+'&#1025;'=>'E','&#1105;'=>'e',
+'&#1238;'=>'E','&#1239;'=>'e',
+'&#1028;'=>'E','&#1108;'=>'e',
+'&#1212;'=>'C','&#1213;'=>'c',
+'&#1214;'=>'C','&#1215;'=>'c',
+'&#1046;'=>'Z','&#1078;'=>'z',
+'&#1217;'=>'Z','&#1218;'=>'z',
+'&#1244;'=>'Z','&#1245;'=>'z',
+'&#1174;'=>'Z','&#1175;'=>'z',
+'&#1047;'=>'Z','&#1079;'=>'z',
+'&#1246;'=>'Z','&#1247;'=>'z',
+'&#1029;'=>'Z','&#1109;'=>'z',
+'&#1248;'=>'Z','&#1249;'=>'z',
+'&#1048;'=>'I','&#1080;'=>'i',
+'&#1252;'=>'I','&#1253;'=>'i',
+'&#1030;'=>'I','&#1110;'=>'i',
+'&#1031;'=>'I','&#1111;'=>'i',
+'&#1049;'=>'J','&#1081;'=>'j',
+'&#1032;'=>'J','&#1112;'=>'j',
+'&#1050;'=>'K','&#1082;'=>'k',
+'&#1178;'=>'K','&#1179;'=>'k',
+'&#1182;'=>'K','&#1183;'=>'k',
+'&#1051;'=>'L','&#1083;'=>'l',
+'&#1033;'=>'L','&#1113;'=>'l',
+'&#1052;'=>'M','&#1084;'=>'m',
+'&#1053;'=>'N','&#1085;'=>'n',
+'&#1034;'=>'N','&#1114;'=>'n',
+'&#1188;'=>'N','&#1189;'=>'n',
+'&#1186;'=>'N','&#1187;'=>'n',
+'&#1054;'=>'O','&#1086;'=>'o',
+'&#1254;'=>'O','&#1255;'=>'o',
+'&#1256;'=>'O','&#1257;'=>'o',
+'&#1055;'=>'P','&#1087;'=>'p',
+'&#1190;'=>'P','&#1191;'=>'p',
+'&#1056;'=>'R','&#1088;'=>'r',
+'&#1057;'=>'S','&#1089;'=>'s',
+'&#1194;'=>'C','&#1195;'=>'c',
+'&#1058;'=>'T','&#1090;'=>'t',
+'&#1196;'=>'T','&#1197;'=>'t',
+'&#1035;'=>'C','&#1115;'=>'c',
+'&#1036;'=>'K','&#1116;'=>'k',
+'&#1059;'=>'U','&#1091;'=>'u',
+'&#1038;'=>'U','&#1118;'=>'u',
+'&#1264;'=>'U','&#1265;'=>'u',
+'&#1266;'=>'U','&#1267;'=>'u',
+'&#1198;'=>'U','&#1199;'=>'u',
+'&#1060;'=>'F','&#1092;'=>'f',
+'&#1061;'=>'H','&#1093;'=>'h',
+'&#1202;'=>'H','&#1203;'=>'h',
+'&#1210;'=>'H','&#1211;'=>'h',
+'&#1062;'=>'C','&#1094;'=>'c',
+'&#1204;'=>'C','&#1205;'=>'c',
+'&#1063;'=>'C','&#1095;'=>'c',
+'&#1268;'=>'C','&#1269;'=>'c',
+'&#1206;'=>'C','&#1207;'=>'c',
+'&#1039;'=>'D','&#1119;'=>'d',
+'&#1064;'=>'S','&#1096;'=>'s',
+'&#1065;'=>'S','&#1097;'=>'s',
+'&#1067;'=>'Y','&#1099;'=>'y',
+'&#1272;'=>'Y','&#1273;'=>'y',
+'&#1069;'=>'E','&#1101;'=>'e',
+'&#1070;'=>'U','&#1102;'=>'u',
+'&#1071;'=>'A','&#1103;'=>'a',
+'&#1122;'=>'E','&#1123;'=>'e',
+'&#1130;'=>'A','&#1131;'=>'a',
+'&#1138;'=>'F','&#1139;'=>'f',
+'&#1140;'=>'Y','&#1141;'=>'y',
+'&#1192;'=>'O','&#1193;'=>'o',
+// ?
+'&#1066;'=>'-',
+'&#1068;'=>'-',
+'&#1216;'=>'-',
+'&#1100;'=>'-',
+'&#769;'=>'',
+
+//### (new) GREEK (transcription following wikipedia: http://de.wikipedia.org/w/index.php?title=Wikipedia:Namenskonventionen/Neugriechisch&oldid=29601735 )
+// groups of two chars
+'&alpha;&iota;'=>'e','&Alpha;&iota;'=>'E',
+'&epsilon;&iota;'=>'i','&Epsilon;&iota;'=>'I',
+'&omicron;&iota;'=>'i','&Omicron;&iota;'=>'I',
+'&omicron;&upsilon;'=>'ou','&Omicron;&upsilon;'=>'Ou',
+'&alpha;&upsilon;'=>'av','&Alpha;&upsilon;'=>'Av',
+'&epsilon;&upsilon;'=>'ev','&Epsilon;&upsilon;'=>'Ev',
+'&eta;&upsilon;'=>'iv','&Eta;&upsilon;'=>'Iv',
+'&mu;&pi;'=>'mp','&Mu;&pi;'=>'B',
+'&nu;&tau;'=>'nt','&Nu;&tau;'=>'D',
+'&tau;&zeta;'=>'tz','&Tau;&zeta;'=>'Tz',
+'&gamma;&kappa;'=>'ng','&Gamma;&kappa;'=>'G',
+'&gamma;&gamma;'=>'ng','&Gamma;&gamma;'=>'Ng',
+// single chars
+'&#902;'=>'A','&#904;'=>'E','&#905;'=>'I','&#906;'=>'I','&#908;'=>'O','&#910;'=>'Y','&#911;'=>'O','&#912;'=>'i',
+'&Alpha;'=>'A','&Beta;'=>'V','&Gamma;'=>'G','&Delta;'=>'D','&Epsilon;'=>'E','&Zeta;'=>'Z','&Eta;'=>'I','&Theta;'=>'Th','&Iota;'=>'I','&Kappa;'=>'K','&Lambda;'=>'L','&Mu;'=>'M','&Nu;'=>'N','&Xi;'=>'X','&Omicron;'=>'O','&Pi;'=>'P','&Rho;'=>'R','&Sigma;'=>'S','&Tau;'=>'T','&Upsilon;'=>'Y','&Phi;'=>'F','&Chi;'=>'Ch','&Psi;'=>'Ps','&Omega;'=>'O',
+'&#938;'=>'I','&#939;'=>'Y','&#940;'=>'a','&#941;'=>'e','&#942;'=>'i','&#943;'=>'i','&#944;'=>'y',
+'&alpha;'=>'a','&beta;'=>'v','&gamma;'=>'g','&delta;'=>'d','&epsilon;'=>'e','&zeta;'=>'z','&eta;'=>'i','&theta;'=>'th','&iota;'=>'i','&kappa;'=>'k','&lambda;'=>'l','&mu;'=>'m','&nu;'=>'n','&xi;'=>'x','&omicron;'=>'o','&pi;'=>'p','&rho;'=>'r','&sigmaf;'=>'s','&sigma;'=>'s','&tau;'=>'t','&upsilon;'=>'y','&phi;'=>'f','&chi;'=>'ch','&psi;'=>'ps','&omega;'=>'o',
+'&#970;'=>'i','&#971;'=>'y','&#972;'=>'o','&#973;'=>'y','&#974;'=>'o','&#976;'=>'b','&thetasym;'=>'th','&upsih;'=>'y','&#979;'=>'y','&#980;'=>'y'
+
 );
 
 ?>
\ No newline at end of file
Index: trunk/wb/framework/class.frontend.php
===================================================================
--- trunk/wb/framework/class.frontend.php	(revision 441)
+++ trunk/wb/framework/class.frontend.php	(revision 442)
@@ -72,7 +72,7 @@
 				$content = @fread($handle, filesize($filename));
 				@fclose($handle);
 				$this->preprocess($content);
-	      header("Location: pages/intro.php");   // send intro.php as header to allow parsing of php statements
+				header("Location: pages/intro.php");   // send intro.php as header to allow parsing of php statements
 				echo ($content);
 				return false;
 			}
@@ -140,10 +140,10 @@
 			// Page ID
 			define('PAGE_ID', $this->page['page_id']);
 			// Page Title
-			define('PAGE_TITLE', htmlentities(($this->page['page_title'])));
+			define('PAGE_TITLE', $this->page['page_title']);
 			$this->page_title=PAGE_TITLE;
 			// Menu Title
-			$menu_title = htmlentities($this->page['menu_title']);
+			$menu_title = $this->page['menu_title'];
 			if($menu_title != '') {
 				define('MENU_TITLE', $menu_title);
 			} else {
@@ -354,7 +354,7 @@
 	            $link = $this->page_link($page['link']);
 	         }
 	         // Create values
-	         $values = array($class,'<a href="'.$link.'" target="'.$page['target'].'" '.$class.'>', '</a>', htmlentities($page['menu_title']), htmlentities($page['page_title']));
+	         $values = array($class,'<a href="'.$link.'" target="'.$page['target'].'" '.$class.'>', '</a>', $page['menu_title'], $page['page_title']);
 	         // Replace vars with value and print
 	         echo "\n".str_replace($vars, $values, $this->menu_item_template);
 	         // Generate sub-menu
Index: trunk/wb/framework/frontend.functions.php
===================================================================
--- trunk/wb/framework/frontend.functions.php	(revision 441)
+++ trunk/wb/framework/frontend.functions.php	(revision 442)
@@ -73,7 +73,7 @@
 		// filter meta-characters
 		$string=preg_quote($string, '/');
 		if ($string!=$last_string ) {
-			$foo=preg_replace('/('.$string.')(?=[^>;]*(&|<))/iUS', '<span class="highlight">$1</span>',$foo);
+			$foo=preg_replace('/((>|;)[^&<]*)('.$string.')(?=[^>;]*(&|<))/iUS', '$1<span class="highlight">$3</span>',$foo);
 			$last_string=$string;
 		}
 	}
@@ -184,6 +184,11 @@
 				if (isset($_GET['searchresult']) AND is_numeric($_GET['searchresult']) ) {
 					if (isset($_GET['sstring']) AND !empty($_GET['sstring']) ){
 						$arr_string = explode(" ", $_GET['sstring']);
+						if($_GET['searchresult'] == 2) {
+							// exact match
+							$arr_string[0] = strtr($arr_string[0], "_"," ");
+							$arr_string[1] = strtr($arr_string[1], "_"," ");
+						}
 						ob_start(); //start output buffer
 						require(WB_PATH.'/modules/'.$module.'/view.php');
 						$foo = ob_get_contents();    // put outputbuffer in $foo
@@ -223,9 +228,9 @@
 					$query_menu=$database->query("SELECT menu_title,link FROM ".TABLE_PREFIX."pages WHERE page_id=$temp");
 					$page=$query_menu->fetchRow();
 					if ($links==true AND $temp!=$page_id)
-						echo '<a href="'.page_link($page['link']).'">'.htmlentities($page['menu_title']).'</a>';
+						echo '<a href="'.page_link($page['link']).'">'.$page['menu_title'].'</a>';
 					else
-					    echo htmlentities($page['menu_title']);
+					    echo $page['menu_title'];
 		        }
 	            $counter++;
 			}
Index: trunk/wb/framework/functions.php
===================================================================
--- trunk/wb/framework/functions.php	(revision 441)
+++ trunk/wb/framework/functions.php	(revision 442)
@@ -338,11 +338,107 @@
 	return $subs;
 }
 
+// Function as replecement for php's htmlspecialchars()
+function my_htmlspecialchars($string) {
+	$string = umlauts_to_entities($string);
+	$string = entities_to_umlauts($string);
+	return($string);
+}
+
+// Function to get the DEFAULT_CHARSET
+function get_wbcharset() {
+	$charset=strtoupper(DEFAULT_CHARSET);
+	if(strcmp($charset,"BIG5") == 0) {
+		$charset="BIG-5";
+	}
+	return($charset);
+}
+
+// Function to convert a string from $from- to $to-encoding, using mysql
+function my_mysql_iconv($string, $from, $to) {
+	// keep current character set values:
+	$character_set_database = mysql_result(mysql_query("SELECT @@character_set_client"),0,0);
+	$character_set_results = mysql_result(mysql_query("SELECT @@character_set_results"),0,0);
+	$collation_results = mysql_result(mysql_query("SELECT @@collation_connection"),0,0);
+	mysql_query("SET character_set_client=$from");
+	mysql_query("SET character_set_results=$to");
+	mysql_query("SET collation_connection=utf8_unicode_ci");
+	$string_escaped = mysql_real_escape_string($string);
+	$converted_string = mysql_result(mysql_query("SELECT '$string_escaped'"),0,0);
+	// restore previous character set values:
+	mysql_query("SET character_set_client=$character_set_database");
+	mysql_query("SET character_set_results=$character_set_results");
+	mysql_query("SET collation_connection=$collation_results");
+	return $converted_string;
+}
+
+// Function to convert a string from html-entities to umlauts
+// and encode htmlspecialchars
+function entities_to_umlauts($string) {
+	$charset = get_wbcharset();
+	// there's no GB2312 or ISO-8859-11 encoding in php's mb_* functions
+	if (strcmp($charset,"GB2312") == 0) {
+		if(function_exists('iconv')) {
+			$string=mb_convert_encoding($string,'UTF-8','HTML-ENTITIES');
+			$string=iconv("UTF-8","GB2312",$string);
+		} else {
+			$string=mb_convert_encoding($string,'UTF-8','HTML-ENTITIES');
+			$string=my_mysql_iconv($string, 'utf8', 'gb2312');
+		}
+	} elseif (strcmp($charset,"ISO-8859-11") == 0) {
+		if(function_exists('iconv')) {
+			$string=mb_convert_encoding($string,'UTF-8','HTML-ENTITIES');
+			$string=iconv("UTF-8","ISO-8859-11",$string);
+		} else {
+			$string=mb_convert_encoding($string,'UTF-8','HTML-ENTITIES');
+			$string=my_mysql_iconv($string, 'utf8', 'tis620');
+		}
+	} else {
+		$string=mb_convert_encoding($string,$charset,'HTML-ENTITIES');
+	}
+	$string=htmlspecialchars($string);
+	return($string);
+}
+
+// Function to convert a string from umlauts to html-entities
+// and encode htmlspecialchars
+function umlauts_to_entities($string) {
+	$charset=get_wbcharset();
+	// there's no GB2312 or ISO-8859-11 encoding in php's mb_* functions
+	if (strcmp($charset,"GB2312") == 0) {
+		if(function_exists('iconv')) {
+			$string=iconv("GB2312","UTF-8",$string);
+			$charset="UTF-8";
+		} else {
+			$string=my_mysql_iconv($string, 'gb2312', 'utf8');
+			$charset="UTF-8";
+		}
+	} elseif (strcmp($charset,"ISO-8859-11") == 0) {
+		if(function_exists('iconv')) {
+			$string=iconv("ISO-8859-11","UTF-8",$string);
+			$charset="UTF-8";
+		} else {
+			$string=my_mysql_iconv($string, 'tis620', 'utf8');
+			$charset="UTF-8";
+		}
+	}
+	$string=mb_convert_encoding($string,'HTML-ENTITIES',$charset);
+	$string=mb_convert_encoding($string,'UTF-8','HTML-ENTITIES');
+	$string=htmlspecialchars($string,ENT_QUOTES);
+	$string=mb_convert_encoding($string,'HTML-ENTITIES','UTF-8');
+	return($string);
+}
+
+// translate any "latin" html-entities to their plain 7bit equivalents
+function entities_to_7bit($string) {
+	require(WB_PATH.'/framework/convert.php');
+	$string = strtr($string, $conversion_array);
+	return($string);
+}
+
 // Function to convert a page title to a page filename
 function page_filename($string) {
-	// First, translate any non-english characters to their english equivalents
-	require(WB_PATH.'/framework/convert.php');
-   $string = strtr($string, $conversion_array);
+	$string = entities_to_7bit(umlauts_to_entities($string));
 	// Now replace spaces with page spcacer
 	$string = str_replace(' ', PAGE_SPACER, $string);
 	// Now remove all bad characters
@@ -371,9 +467,7 @@
 
 // Function to convert a desired media filename to a clean filename
 function media_filename($string) {
-	// First, translate any non-english characters to their english equivalents
-	require(WB_PATH.'/framework/convert.php');
-   $string = strtr($string, $conversion_array);
+	$string = entities_to_7bit(umlauts_to_entities($string));
 	// Now remove all bad characters
 	$bad = array(
 	'\'', // '
