[TYPO3-german] Probleme mit Umlauten im GMENU seit einem Umzug auf eienn neuen Server
Christian Hensel
chensel at visiopro.de
Sun Feb 4 14:34:38 CET 2007
Hallo Sven,
erstmal vielen Dank.
Ja wird bei mir nicht richtig angezeigt.
Nun ist die Frage:
Wie kann ich vorgehen, dass eben konkret meine GMENUs wieder richtig
dargestellt werden?
Wie bist du vorgegangen?
viele grüse
Christian Hensel
"Sven Grützmann" <sven.gruetzmann at gmx.net> schrieb im Newsbeitrag
news:mailman.1.1170595173.20732.typo3-german at lists.netfielders.de...
> Hallo Christian,
>
>
>> Seit einem Umzug auf einen neuen Server, werden die Umlaute in GMENUs in
>> keiner Typo3 Installation mehr richtig gerendert.
>
> Ich habe ein ähnliches Problem. Das Problem tritt nur auf, wenn ich Suse
> Linux ab Version 10.1 mit PHP5 und gebundelter gdlib nutze. Teste mal
> folgendes Skript:
>
> <?php
> header("Content-type: image/png");
>
> $im = imagecreatetruecolor(400, 30);
>
> $white = imagecolorallocate($im, 255, 255, 255);
> $black = imagecolorallocate($im, 0, 0, 0);
>
> imagefilledrectangle($im, 0, 0, 399, 29, $white);
>
> $text = 'Umlaute: äöü...';
> $font = 'arial.ttf';
> imagettftext($im, 20, 0, 10, 20, $black, $font, $text);
>
> imagepng($im);
> imagedestroy($im);
> ?>
>
> Wenn die Umlaute in dem Teststring nicht richtig dargestellt werden, liegt
> es an der gdlib. Schickst du den Teststring durch die Funktion
> "foxy_utf8_to_nce" (-> http://de.php.net/imagettftext#57416 ) sollte
> wieder alles in Ordnung sein. Diese Funktion konvertiert utf8-Zeichen als
> numerische Entities.
>
> --------------------------------------------
> define('EMPTY_STRING', '');
>
> function foxy_utf8_to_nce(
> $utf = EMPTY_STRING
> ) {
> if($utf == EMPTY_STRING) return($utf);
>
> $max_count = 5; // flag-bits in $max_mark ( 1111 1000 == 5 times 1)
> $max_mark = 248; // marker for a (theoretical ;-)) 5-byte-char and mask
> for a 4-byte-char;
>
> $html = EMPTY_STRING;
> for($str_pos = 0; $str_pos < strlen($utf); $str_pos++) {
> $old_chr = $utf{$str_pos};
> $old_val = ord( $utf{$str_pos} );
> $new_val = 0;
>
> $utf8_marker = 0;
>
> // skip non-utf-8-chars
> if( $old_val > 127 ) {
> $mark = $max_mark;
> for($byte_ctr = $max_count; $byte_ctr > 2; $byte_ctr--) {
> // actual byte is utf-8-marker?
> if( ( $old_val & $mark ) == ( ($mark << 1) & 255 ) ) {
> $utf8_marker = $byte_ctr - 1;
> break;
> }
> $mark = ($mark << 1) & 255;
> }
> }
>
> // marker found: collect following bytes
> if($utf8_marker > 1 and isset( $utf{$str_pos + 1} ) ) {
> $str_off = 0;
> $new_val = $old_val & (127 >> $utf8_marker);
> for($byte_ctr = $utf8_marker; $byte_ctr > 1; $byte_ctr--) {
>
> // check if following chars are UTF8 additional data blocks
> // UTF8 and ord() > 127
> if( (ord($utf{$str_pos + 1}) & 192) == 128 ) {
> $new_val = $new_val << 6;
> $str_off++;
> // no need for Addition, bitwise OR is sufficient
> // 63: more UTF8-bytes; 0011 1111
> $new_val = $new_val | ( ord( $utf{$str_pos + $str_off} ) & 63 );
> }
> // no UTF8, but ord() > 127
> // nevertheless convert first char to NCE
> else {
> $new_val = $old_val;
> }
> }
> // build NCE-Code
> $html .= '&#'.$new_val.';';
> // Skip additional UTF-8-Bytes
> $str_pos = $str_pos + $str_off;
> }
> else {
> $html .= chr($old_val);
> $new_val = $old_val;
> }
> }
> return($html);
> }
> --------------------------------------------
>
> Grüße, Sven
More information about the TYPO3-german
mailing list