Kodierungsproblem

stetabar

Mitglied
Hallo zusammen,

ich habe in einem Projekt eine PHP-Klasse (utf-8), die über eine JAVA-App auf ne DB zugreift. In der ganzen Konstellation geht alles und da will ich auch nicht mehr dran, weil es einfach läuft. Jetzt wollte ich noch eine PHP-Klasse verwenden um ein paar Daten direkt in die DB zu schreiben und da treten nun Probleme auf...

aus einem Ö wird (über PHP->JAVA->DB): Ãœ
aus einem Ö wird (über PHP->DB): Ãœ

Ich vermute mal, dass utf-8 die 2te Variante ist und das Java das irgendwie nochmal konvertiert (unicode?).

wie kann ich das über PHP nachbilden?

Danke für eure Hilfe!
 
ich habe jetzt gerade noch einmal etwas getestet und dabei festgestellt, dass ich meine werte einfach nur in unicode umwandeln müsste. dann würde alles klappen.

wenn ich meine PHP-klasse auf unicode stelle und Ãœ eintrage (also schon das was bei utf-8 rumkommen würde) speichert er das alles korrekt in der DB.

Also gibt es einen mechanismus in PHP mit dem ich einen String in unicode konvertieren kann? dann wäre mein problem gelöst...

danke für eure hilfe!
 
utf-8 und unicode ist leider nicht das gleiche...
wenn ich den wert über utf8_encode kodiere kommt da was anderes bei rum... :(
 
Wenn das nicht funktioniert, dann solltest du erstmal prüfen, in welcher Kodierung deine Inhalte überhaupt ankommen.

Und versuche dich bitte an die Groß- und Kleinschreibung zu halten.
 
Also es sieht so aus, dass ich einen UTF-8 String (PHP) an JAVA (UNICODE) übergebe. Dachte UNICODE und UTF-8 wären identisch. Ist aber nicht so.
Also muss ich einen UTF-8 kodierten Wert in UNICODE umwandeln, damit es die richtige Form bekommt.

Habe jetzt gerade auch mal geschaut, ob ich das ggf. von der DB machen lassen kann. Ich verwende eine PgSQL DB in der es einen Befehl "convert" gibt. Leider habe ich da aber auch noch keine passende Lösung gefunden.

In manchen Systemen wird UTF-8 und UNICODE gleich behandelt, bei anderen sind die Kodierungen unterschiedlich...

Das ist auch gerade mein Hauptproblem, dass die unterschiedlichen Systeme nicht immer unterscheiden...
 
UTF 8 ist ein Unicode Format mit 8 Bit.

Wenn die Java Applikation mit 16bit antwortet, dann müsstest du erstmal die Funktion benutzen, die Zodiac dir etwas weiter oben gepostet hat.

[phpf]mb_detect_encoding[/phpf]

Diese Funktion kann helfen, ansonsten gibt es in den Kommentaren noch einige hilfreiche Tipps und Funktionen.
 
Also ich bin mir sicher, dass es utf-8 und darauf angewendet unicode ist.
Ich muss nur wissen, wie ich innerhalb von php einen String in unicode umwandel. Und da gibt es zwischen utf-8 und unicode noch Unterschiede.

Ich habe auch geschaut, ob ich die Konvertierung auch innerhalb von meiner DB durchführen kann. Es gibt unter PgSQL einen convert Befehl, der unterscheidet aber nicht zwischen utf8 und unicode...

convert([String],[Source_Encoding], [Deination_Encoding])

bspw.

convert('Ü','LATIN1', UNICODE')
=
convert('Ü','LATIN1', UTF8')

Und das dürfte ja eigentlich nicht der Fall sein.
Ich bin mit meinem Latein am Ende...

Bin für jede Hilfe dankbar...
 
Unicode ist ja auch nur ein Standard und UTF-8 dessen Umsetzung, also die Kodierung.

Was sagt denn die Funktion, die ich oben geposted habe?

Oder diese Funktion:

PHP:
<?php

// Returns true if $string is valid UTF-8 and false otherwise.
function is_utf8($string) {
   
    // From http://w3.org/International/questions/qa-forms-utf-8.html
    return preg_match('%^(?:
          [\x09\x0A\x0D\x20-\x7E]            # ASCII
        | [\xC2-\xDF][\x80-\xBF]             # non-overlong 2-byte
        |  \xE0[\xA0-\xBF][\x80-\xBF]        # excluding overlongs
        | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte
        |  \xED[\x80-\x9F][\x80-\xBF]        # excluding surrogates
        |  \xF0[\x90-\xBF][\x80-\xBF]{2}     # planes 1-3
        | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
        |  \xF4[\x80-\x8F][\x80-\xBF]{2}     # plane 16
    )*$%xs', $string);
   
} // function is_utf8

?>
Ist aus den Kommentaren gezogen.
 
Zurück