Umlautproblem

Halo zusammen

Ich weis das thema wird häufig angesprochen ^^
Aber ich weis echt ned was ich falsch mache… :smiley:

Und zwar will ich n text per GET an n php script übergeben, das dann daraus ein Bild macht (vertikaler text)
Nun, wenn ich den text lediglich mit (raw)urlencode codiere und dann wieder entsprechend decodiere, kommt an der stelle eines é ein Kästchen. Wenn ich den String zuerst noch utf8 codiere, und entsprechend decodiere… dasselbe, bzw 2 kästchen…

Wenn ich aber bei der urlcodierung nach dem encodierten é einen abstand mache, funktioniert das problemlos… :astonished: … nur stört dann eben der abstand ^^’

help

grüsse

hast php auf utf-8 gestellt?

wie meinst du das jetzt?

die dateien (alle) sind iso-8859-1 codiert
der header sagt das selbe… also müsste das theoretisch ohne utf8_en/decode gehen, oder?
:unamused: und da ich das ganze ja eh urlcodiere sollte es da erst recht keine probleme geben, da die in urls verwendeten zeichen in beiden charsets die selbe position / nummer haben, oder irre ich mich da?

[quote=“bcg”][]
:unamused: und da ich das ganze ja eh urlcodiere sollte es da erst recht keine probleme geben, da die in urls verwendeten zeichen in beiden charsets die selbe position / nummer haben, oder irre ich mich da?[/quote]jain, also URLEncode ist nen eigenes Encoding was bei jedem Charset funktionieren sollte.
Jedoch: Latin-1 “é” != UTF-8 "é"
selbes betrifft Deutsche umlaute und viele andere Zeichen, genauer ist ein äöü oder é bei UTF-8 2 Bytes lang während Latin-1 immer nur 1 Byte nutzt.
Ich bin mir aber nicht sicher ob UTF-8 alle Sonderzeichen Codiert oder nicht… glaube alle ASCII Zeichen bleiben normal. [size=85](UTF-8 hat ja keine fixe Länge wie Unicode sondern kann glaube ich zu 4 Bytes pro Zeichen “fressen”)[/size]

zu deinem Problem kann ich jedoch net viel sagen… vor allem wenn es mit nem Leerzeichen danach funktioniert^^
Eigl. sollte es gehen :smiley: Haste mal nen Beispiel? [size=85](nenne auch das Encoding der Datei)[/size]

aaalso
wie schon gesagt sind die zeichensätze aller dateien iso-8859-1 (also die datei, die auf das bild referenziert und die datei, die das bild dann erstellt haben den selben zeichensatz)
wenn ich also nun z.b. den namen “Cédric” habe, wird das zu “C%E9dric”, was nicht funktioniert
wenn ich das nun aber manuell zu “C%E9 dric” ändere, funktioniert es einwandfrei… nur leider eben mit nem abstand im namen…

wenn ich das ganze nun vor dem urlencode noch mit utf8 codiere, wird aus dem é wie du gesagt hast ein 2 Ziffern langes codestück “%C3%A9”. Da ist nun genau das selbe… funktioniert nich… kommt nur so n viereckchen und das “d” verschwindet und wenn ich n abstand dahinter mache, also “C%C3%A9 dric”, steht da wieder “Cé dric” … :unamused:

Hi,

wie wäre es wenn du sonderzeichen einfach in der url mit einem leerzeichen überträgst und php des dann wieder entfernen lässt. (und ggf. am anfang einfach – und am ende zzz anhängst und dadurch php angewiesen wird des leerzeichen zu entferenen) Also das für php dann so zusagen des Code wort ist wenn am Anfang – kommt und am Ende zzz das des leerzeichen weg muss

z.b.
?name=C%E9 dric
oder
?name=–C%E9 driczzz

hat was… aber ich habe gerade ne ganz andere sichtweise aufgedekt, danke! :slight_smile:

nämlich liegt der fehler am … zeichensatz! wer hätte das gedacht? :ps:
Nur leider liegt das Problem nicht an der Übertragung zum Client und wieder zurück, sondern an der funktion imagettftext (die erwartet einen utf8 codierten string)

nun folgendes: wenn ich nun wieder den namen „Cédric“ habe, wird nun nach dem viereckchen das d wenigstens angezeigt… aber das é ist und bleibt ein kästchen… ob ich den string nun vor oder nach dem übertragen (als get parameter) codiere spielt dabei keine rolle…

Nachtrag: ob ich nun nach dem (codierten) é nen abstand mache oder nicht, ändert nun nichts mehr… ausser eben den abstand selber

Wie gesagt^^ Man uns ein Beispiel^^
Ein Kurzes PHP Script was genau das demonstriert was du zeigen willst, dann können wir das ganz einfach anpassen^^
Hab keine Lust mir das selbst zu basteln und dann gehts wohl möglich noch auf Anhieb^^

:unamused: ok ich stell hier das gekürzte (!) “zeug” rein:

[size=85]mkimg.class.php[/size]

[size=85]mkimg.php[/size]

[size=85]codeschnippsel.php[/size]

Die Reihenfolge ist zwar verkehrt, aber ich hoff das ist halbwegs selbsterklärend…

überschreibst du die Funktion $this->text nicht mit einem Text bei der Zuweisung?

Nachtrag:
Dein Beispiel war net wirklich gut :smiley:
Denn 1. ist ne menge unnötiges bei, daher es konzentriert sich nicht auf das Problem, zum anderen Funktionierts so net mal :wink:
habs mal angepasst wenn auch nicht “optimiert”

[code]<?php
class MakeImage {
//…
public function __construct($text, $size, $angle = 0, $color = array(0,0,0)) {
$this->text = $text;
$this->size = $size;
$this->angle = $angle;
$d = $this->_dimensions(); //Punkte etc berechnen
$this->img = imagecreate(4 + $d[0], 4 + $d[1]);
imagecolorallocatealpha($this->img, 255, 255, 255, 127);
$this->color = imagecolorallocate($this->img, $color[0], $color[1], $color[2]);
$this->font = ‘arial.ttf’;
$this->_text($d[0], $d[1]);
$this->_text(30, 30);
}
public function output() {
header(‘Content-Type: image/png’);
imagepng($this->img);
}
private function _dimensions() {
return array(300,300);
}
private function _text($x, $y) {
imagettftext($this->img, $this->size, $this->angle, $x, $y, $this->color, $this->font, $this->text);
}
}

// $p = array(‘Name’ => ‘Named’, ‘Vorname’ => ‘Cédric’);
$img = new MakeImage(‘René Schümann’,
12,
90,
array(
0,
0,
0
));
$img->output();
?>[/code]
Jedenfalls… auf bplaced lässt sich dein Problem reproduzieren…
Auf nem eigenen Server der ebenfalls das neuste PHP sowie Debian einsetzt, geht es jedoch ohne Probleme, Font natürlich jeweils 1zu1 die selbe.
ultimateteamspeak.de/other/white … roblem.php

Will ungern sagen das es an bplaced liegt… aber anders kann ichs mir net erklären :smiley: [size=85](hatten wir sowas net schonmal? Da aber mit Schrägem Text?)[/size]

[quote]überschreibst du die Funktion $this->text nicht mit einem Text bei der Zuweisung?[/quote]Ich denke nicht… schliesslich hat es ja funktioniert, dass Text angezeigt wurde

[quote]Denn 1. ist ne menge unnötiges bei, daher es konzentriert sich nicht auf das Problem, zum anderen Funktionierts so net mal :wink:[/quote]jo stimmt ^^’ soory :p

… du hast recht, auf nem anderen server funktioniert es …
aber lokal bei mir (xampp) funktioniert es auch nicht… und das gibt mir dann doch des gefühl, „da funzts, da ned“… das ist nich so professionell, oder? :p na egal

(Also ich drücks ma so aus: dort wos [size=85]momentan[/size] soll laufen läufts ja… rotanlauf (gibts hier kein errötendes smiley? :red: ))

Hab jedenfalls wieder etwas wichtiges gelernt :slight_smile: (… naja vielleicht mehrere wichtige sachen ^^)

Danke vielmals für eure Geduld und so weiter ^^

XAMPP geht auch net? Weches hast? PHP 5.3 oder nochn älteres?
Naja… ich finds iwie verarsche das PHP bugs hat… oder es ist die gd library o.ä. dennoch.

Wenn Kästchen statt der Zeichen angezeigt werden, liegt es in der Regel daran, dass die Schriftart die Zeichen nicht unterstützt. Ich kann mich natürlich auch in diesem Fall irren und der Fehler liegt woanders, jedenfalls konnte ich dein Problem mit „arial.ttf“ nicht reproduzieren. Bei mir habe ich den Text selbstverständlich UTF-8 kodiert übergeben. Es gab keinerlei Probleme. Selbst nach dem ich utf8_decode angewandt habe, um zu sehen was passiert wenn es iso-8859 kodiert ist, konnte die gd-lib die Zeichen korrekt erkennen.

In deinem Code habe ich folgendes gesehen:

rawurldecode() ist an dieser stelle nicht nötig, da dies bereits von PHP übernommen wird, und die Daten bereits in dekodierter Form im GET Array vorhanden sind (das sollte hier aber nicht das Problem sein).

Hallo zusammen,

ich schließe mich hier auch mal kurz an. Ich versuche mich gerade an Typo3 und habe dort beim einlesen von nem php-Code auch ein Umlautproblem.
Ich lese eine Tabelle von meiner Seite ein und speichere diese Tabelle in der DB. In der DB werden alle Zeichen richtig dargesellt.
Wenn ich nun den Inhalt aus der DB auf meiner Typo3-Seite anzeigen lasse, dann bekomme ich z.B. den Verein nur so TTC M�ller angezeigt anstatt so TTC Müller.
Allerdings habe ich das Problem nur bei diesen Inhalten, die restliche WEbseite hat keine Probleme mit ü, ä, etc.

MfG tobsp

dieses Fragezeichen bedeutet, dass die Texte bei der Ausgabe nicht UTF-8 kodiert sind, der Browser aber UTF-8 erwartet.

Wenn die Texte in der DB per phpmyadmin korrekt angezeigt werden, könnte es höchstens daran liegen, dass die Client Encoding zum MySQL Server auf latin/iso-8859 gestellt ist, das charset der Webseite allerdings auf utf-8. Ändern sollte man die Client Encoding mit mysql_set_charset().

Ein anderer Grund wäre das überflüssige verwenden von utf8_decode bei der Ausgabe (warum auch immer). Wenn die Daten korrekt in der Datenbank abgelegt sind, dann kann man mittels mysql_set_charset die Daten ohnehin in jede gewünschte Ausgabekodierung bringen.

[quote=“Balmung”]dieses Fragezeichen bedeutet, dass die Texte bei der Ausgabe nicht UTF-8 kodiert sind, der Browser aber UTF-8 erwartet.

Wenn die Texte in der DB per phpmyadmin korrekt angezeigt werden, könnte es höchstens daran liegen, dass die Client Encoding zum MySQL Server auf latin/iso-8859 gestellt ist, das charset der Webseite allerdings auf utf-8. Ändern sollte man die Client Encoding mit mysql_set_charset().

Ein anderer Grund wäre das überflüssige verwenden von utf8_decode bei der Ausgabe (warum auch immer). Wenn die Daten korrekt in der Datenbank abgelegt sind, dann kann man mittels mysql_set_charset die Daten ohnehin in jede gewünschte Ausgabekodierung bringen.[/quote]

Hallo Balmung,

danke für deine Informationen. Ich habe nun mysql_set_charset('utf8',$link); eingefügt und meine Zeichen sind verschwunden und alles wird korrekt angezeigt.