Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Zeichencodierung umwandeln (https://www.delphipraxis.net/149038-zeichencodierung-umwandeln.html)

Synollus 12. Mär 2010 21:45


Zeichencodierung umwandeln
 
Hallo,

ich habe folgende Situation:

- ich habe eine Datenbank mit UTF8-Codierung. Daten die dort eingetragen oder ausgelesen werden, werden mit utf8_encode / utf8_decode verarbeitet.
- die Website ist im UTF8 Format (Meta-Tags)

Nun möchte ich auf der Seite Daten aus der Datenbank auslesen und in einem Link als Parameter verstauen (kein Problem mit UTF8_encode). Wenn dieser Link aufgerufen wird, werden die Daten an den entsprechenden Server übermittelt, der allerdings die Daten im iso-8859-1-Format möchte.

Ich hatte schon 2 Möglichkeiten ausprobiert, bei denen aber beide Male Frage- oder Sonderzeichen bei Umlauten auftraten. Leider habe ich nicht die Möglichkeit alles auszuprobieren, da mir der "Kunde" er E-Mail erst antworten muss, ob es klappt.

Bei unserem letzten Versuch hatte ich folgendes mit den Daten aus der DB gemacht:

Code:
html_entity_decode(utf8_encode($irgend['was']))
Die Daten im Quelltext bzw. im Link waren fehlerfrei in den Umlauten, nach Anklicken und Übertragen an den Kunden, jedoch nicht mehr. Dort kamen dann Fragezeichen zum Vorschein.

Kann mir eventuell jemand weiterhelfen, ohne dass ich jetzt viel rumprobieren muss?

Synollus 13. Mär 2010 16:32

Re: Zeichencodierung umwandeln
 
Nicht falsch verstehen, aber ich bin ein bisschen verwundert, dass sich noch niemand gemeldet hat.

Ich dachte das wäre etwas ganz einfaches oder ist etwas unklar?

Synollus 14. Mär 2010 21:58

Re: Zeichencodierung umwandeln
 
Man möge mir meinen Dreifachpost verzeihen, aber ich konnte meinen letzten Beitrag nicht mehr editieren.

Ich habe nochmal Recherchen angestellt und daraufhin folgendes getestet:

Code:
iconv("UTF-8", "ISO-8859-1", $str); // Illegal Charakter found ...
Code:
iconv("UTF-8", "ISO-8859-1", utf8_decode($str)); // Half nicht
Code:
iconv("UTF-8", "ISO-8859-1", utf8_encode($str)); // Half nicht
Ich weiß echt nicht mehr, was ich noch probieren soll.

Hat denn keiner eine Idee?

XHelp 15. Mär 2010 00:24

Re: Zeichencodierung umwandeln
 
Es würde sicherlich helfen, wenn du ein Minimalbeispiel posten könntest.
Normalerweise müsste es mit utf8_encode und utf8_decode problemlos klappen, also könnte die Ursache woanders liegen.

Synollus 15. Mär 2010 00:37

Re: Zeichencodierung umwandeln
 
Hi,

viel kann ich da nicht posten. Wie gesagt, ich hole die Daten (UTF8) aus der DB (MySQL, MyISAM). Dann werden die Parameter an eine URL rangehängt, à la:

Code:
https://www.test.de/test.php?data=<?php echo $test['test']...
Dazwischen findet dann die Konvertierung statt. Vielleicht ist es von Bedeutung, dass die Datei kein Unicode ist, sondern ganz normal unter Windows gespeichert und via FTP hochgeladen wurde? (Ich bin mir nicht sicher, ob Unicode hier eine Rolle spielt).

Werden die Daten im Quelltext richtig dargestellt bzw. der Link im Browser richtig angezeigt, klicke ich rauf und die Daten werden an einen anderen Server übertragen, der sie als ISO-8895-1 erwartet und vermutlich in die DB (ISO-8895-1) schreibt.

Dort kommen ä,ö,ü, etc. als Fragezeichen, Brüche, oder sonstiges an, je nachdem welche Kodierungs- / Dekodierungsfunktionen ich vorher benutzt habe.

XHelp 15. Mär 2010 00:56

Re: Zeichencodierung umwandeln
 
Was sagt denn dein Server zu HTTP_ACCEPT_CHARSET?
Ich bin mir dennoch ziemlich sicher, dass der Fehler nicht in den Einstellungen, sondern im Quelltext ist. Und ohne Quelltext lässt sich auch schlecht sagen wo.
[edit]
Wenn du z.B. utf8_decode bei NICHT utf strings machst, dann kommen "Fragezeichen" raus. Also müsste etwas bei den Verschachtelungen falsch sein
[/edit]

Synollus 15. Mär 2010 15:05

Re: Zeichencodierung umwandeln
 
HTTP_ACCEPT_CHARSET ISO-8859-1,utf-8;q=0.7,*;q=0.7

Hier der Quellcode:

Code:

$ds = mysql_fetch_array(mysql_query("SELECT * FROM data WHERE id='".$id."' LIMIT 1"));
function convi($str)
  {
     //return iconv("UTF-8", "ISO-8859-1", html_entity_decode(utf8_encode($str)));
     return $str;
  }

echo '<iframe src="https://www.google.com/lp/d_k5/form.php
?anrede='.(($ds['anrede'] == 0) ? 'Herr' : 'Frau').'
&vorname='.convi($ds['vorname']).'
&nachname='.convi($ds['nachname']).'
&strasse='.convi($ds['strasse']).'
&hausnummer='.convi($ds['nr']).'
&ort='.convi($ds['ort']).'
&email='.convi($ds['email']).'
&gebdatum='.convi($date[2]).'-'.convi($date[1]).'-'.convi($date[0]).'
&wid='.$wid.'" style="..."></iframe>
<noframes>
  ...
</noframes>';
convi ist nur eine Wrapper(?)-Funktion, damit ich beim Testen von Dekodierungsfunktionen nicht jedesmal alles ändern muss.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz