Project

General

Profile

« Previous | Next » 

Revision 482

Added by Matthias almost 17 years ago

Again fixed some issues with search results page on some php4 servers (Thanks to thorn)

View differences:

trunk/wb/framework/frontend.functions.php
75 75
	$search_string = implode("|", $arr_string);
76 76
	$string = entities_to_umlauts($search_string, 'UTF-8');
77 77
	$string = strtr($string, $string_ul_umlauts);
78
	// do some magic to prevent < > ... from being highlighted
78 79
	$foo = strtr($foo, array("<"=>"!,,!", ">"=>"!,,,!", "&"=>"!,,,,!", """=>"!,,,,,!", "'"=>"!,,,,,,!"));
79 80
	$string = strtr($string, array("<"=>"!,,!", ">"=>"!,,,!", "&"=>"!,,,,!", """=>"!,,,,,!", "'"=>"!,,,,,,!"));
80 81
	$foo = preg_replace('/('.$string.')(?=[^>]*<)/iUS', '<span class="highlight">$1</span>',$foo);
......
84 85
	}
85 86
	$foo = strtr($foo, array("!,,!"=>"&lt;", "!,,,!"=>"&gt;", "!,,,,!"=>"&amp;", "!,,,,,!"=>"&quot;", "!,,,,,,!"=>"&#039;"));
86 87
	if(DEFAULT_CHARSET != 'utf-8') {
87
		$foo = mb_convert_encoding_wrapper($foo, DEFAULT_CHARSET, 'UTF-8');
88
		//$foo = umlauts_to_entities($foo, 'UTF-8');
88
		$foo = umlauts_to_defcharset($foo, 'UTF-8');
89 89
	}
90 90
	return $foo;
91 91
}
trunk/wb/framework/functions.php
348 348

  
349 349
// Function to convert a string from $from- to $to-encoding, using mysql
350 350
function my_mysql_iconv($string, $from, $to) {
351
	// keep current character set values:
352
	$character_set_database = mysql_result(mysql_query("SELECT @@character_set_client"),0,0);
353
	$character_set_results = mysql_result(mysql_query("SELECT @@character_set_results"),0,0);
354
	$collation_results = mysql_result(mysql_query("SELECT @@collation_connection"),0,0);
355
	mysql_query("SET character_set_client=$from");
356
	mysql_query("SET character_set_results=$to");
357
	mysql_query("SET collation_connection=utf8_unicode_ci");
351
	// keep current character set values
352
	global $database;
353
	$query = $database->query("SELECT @@character_set_client");
354
	if($query->numRows() > 0) {
355
		$res = $query->fetchRow();
356
		$character_set_database = $res['@@character_set_client'];
357
	}	else { echo mysql_error()."\n<br />"; }
358
	$query = $database->query("SELECT @@character_set_results");
359
	if($query->numRows() > 0) {
360
		$res = $query->fetchRow();
361
		$character_set_results = $res['@@character_set_results'];
362
	}	else { echo mysql_error()."\n<br />"; }
363
	$query = $database->query("SELECT @@collation_connection");
364
	if($query->numRows() > 0) {
365
		$res = $query->fetchRow();
366
		$collation_results = $res['@@collation_connection'];
367
	}	else { echo mysql_error()."\n<br />"; }
368
	// set new character set values
369
	$query = $database->query("SET character_set_client=$from");
370
	$query = $database->query("SET character_set_results=$to");
371
	$query = $database->query("SET collation_connection=utf8_unicode_ci");
358 372
	$string_escaped = mysql_real_escape_string($string);
359
	$converted_string = mysql_result(mysql_query("SELECT '$string_escaped'"),0,0);
360
	// restore previous character set values:
361
	mysql_query("SET character_set_client=$character_set_database");
362
	mysql_query("SET character_set_results=$character_set_results");
363
	mysql_query("SET collation_connection=$collation_results");
373
	// convert the string
374
	$query = $database->query("SELECT '$string_escaped'");
375
	if($query->numRows() > 0) {
376
		$res = $query->fetchRow();
377
		$converted_string = $res[0];
378
	}	else { echo mysql_error()."\n<br />"; }
379
	// restore previous character set values
380
	$query = $database->query("SET character_set_client=$character_set_database");
381
	$query = $database->query("SET character_set_results=$character_set_results");
382
	$query = $database->query("SET collation_connection=$collation_results");
364 383
	return $converted_string;
365 384
}
366 385

  
......
373 392
	}
374 393
	$use_iconv = true;
375 394
	$use_mbstring = true;
395
	/*
376 396
	if(version_compare(PHP_VERSION, "5.1.0", "<")) {
377 397
		$use_mbstring = false; // don't rely on mb_convert_encoding if php<5.1.0
378 398
		$use_iconv = false; // don't rely on iconv neither
379 399
	}
400
	*/
380 401
	
381 402
	// try mb_convert_encoding(). This can handle to or from HTML-ENTITIES, too
382 403
	if ($use_mbstring && function_exists('mb_convert_encoding')) {
......
723 744
			$string=utf8_encode($string);
724 745
		}
725 746
		// encode html-entities
726
		//$string=string_decode_encode_entities($string, 'HTML-ENTITIES', 'UTF-8');
727
		$string=mb_convert_encoding_wrapper($string, 'HTML-ENTITIES', 'UTF-8');
747
		$string=string_decode_encode_entities($string, 'HTML-ENTITIES', 'UTF-8'); // this is very slow!
748
		//$string=mb_convert_encoding_wrapper($string, 'HTML-ENTITIES', 'UTF-8');
728 749
	}
729 750
	else {
730 751
		$string = string_to_utf8($string, $charset_in);
731 752
		// encode html-entities
732 753
		if (is_UTF8($string)) {
733
			//$string=string_decode_encode_entities($string, 'HTML-ENTITIES', 'UTF-8');
734
			$string=mb_convert_encoding_wrapper($string, 'HTML-ENTITIES', 'UTF-8');
754
			$string=string_decode_encode_entities($string, 'HTML-ENTITIES', 'UTF-8');
755
			//$string=mb_convert_encoding_wrapper($string, 'HTML-ENTITIES', 'UTF-8');
735 756
		}
736 757
	}
737 758
	return $string;
738 759
}
739 760

  
761
function umlauts_to_defcharset($string, $charset) {
762
		$charset_out = strtoupper(DEFAULT_CHARSET);
763
		if ($charset_out == "") { $charset_out = 'ISO-8859-1'; }
764
		
765
		if($charset_out == $charset) {
766
			return $string;
767
		}
768
		if($charset_out == 'ISO-8859-1' && $charset == 'UTF-8') {
769
			$string = utf8_decode($string);
770
		}
771
		else {
772
			$string=mb_convert_encoding_wrapper($string, $charset_out, 'UTF-8');
773
		}
774
		
775
	return $string;
776
}
777
	
740 778
// translate any latin/greek/cyrillic html-entities to their plain 7bit equivalents
741 779
// and numbered-entities into hex
742 780
function entities_to_7bit($string) {

Also available in: Unified diff