[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