PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : utf8_decode nicht komplett?



tocotac
02-11-2005, 09:40
hallo Forum,

Ich habe folgendes Problem:
Ich habe eine Webseite ind latin1 und am Ende möchte ich einige Daten aus einer Datenbank anzeigen lassen, die in UTF8 gespeichert sind. Also übersetze ich die Daten vorher mittels utf8_decode in latin1. Bei deutschen Umlauten (ä -> ä|ö -> ö|ü -> ü|...) funktioniert das alles auch, ohne Probleme.
Aber bei türkischen Umlauten (ı|ÄŸ|__alle, die mit einem grossen "Ä" angangen__) scheitert die Funktion.

Wenn ich am Anfang uft8 als Zeichensatz mit der Funktion header() angeben, werden die Umlaute korrekt überstetzt, aber dann stimmt der Rest nicht mehr, weil die restliche Seite in latin1 ist.

kann mir jemand weiterhelfen?
vielen Dank

p.s.: bin auch per IM erreichbar -> ICQ: 144322540

oracle2025
02-11-2005, 09:53
Da stellt sich die Frage ob die Türkischen Umlaute im Latin1 Zeichensatz enthalten sind. Falls das nicht der Fall ist, mußt du wahrscheinleich die ganze Seite auf utf8 umstellen.

undefined
02-11-2005, 09:53
Das Problem ist mir nur zu bekannt :rolleyes:
Auszug aus einer meiner Klassen

/**
* @short Konvertiere String nach UTF-8
* @param [String] \b $i
* @param [String] \b $c Convertiere von Type utf-8 Standard
* @param [String] \b $s addslashes
* @return (String) \b $i (UTF-8)
* @protectedsection
*/
protected function sql_StringConvertToUtf8( $in, $c = 'utf-8', $s = true )
{
$a = array( "iso-8859-1", "iso-8859-15", "utf-8", "cp866", "cp1251", "cp1252", "koi8-r",
"big5", "gb2312", "big5-hkscs", "shift_jis", "euc-jp" );

$c = chop( $c );
$c = strtolower( $c );
if ( ! in_array( $c, $a, true ) )
return $in;

$in = stripslashes( $in );
$f = ( $c == 'utf-8' ) ? 'u' : '';
if ( preg_match( "/\&[#\d|\w]/$f", $in ) )
$in = html_entity_decode( $in, ENT_QUOTES, $c );

$str = utf8_encode( utf8_decode( $in ) );
if ( $str === $in )
$in = utf8_decode( $in );
else if ( strcasecmp( $str, $in ) )
$in = utf8_decode( $in );

$in = ( $s ) ? addslashes( $in ) : $in;
return utf8_encode( $in );
}

Danach ein htmlentities()