Umgang mit eacute und anderen Sonderzeichen mit Oracle, PHP und Oci8

Hallo, ich versuche, Namen in einer Oracle-Datenbank zu speichern und sie mit PHP und oci8 wieder abzurufen.

Wenn ich jedoch dieé direkt in die Oracle-Datenbank und benutze oci8, um es wieder abzurufen. Ich erhalte gerade einee

Muss ich alle Sonderzeichen (einschließliché) in HTML-Entitäten (dh:é) vor dem Einfügen in die Datenbank ... oder fehlt mir etwas?

Vielen Dank

UPDATE: 1. März um 18:40 Uhr

fand diese Funktion:http://www.php.net/manual/de/function.utf8-decode.php#85034

function charset_decode_utf_8($string) {
    if(@!ereg("[\200-\237]",$string) && @!ereg("[\241-\377]",$string)) {
        return $string;
    }
$string = preg_replace("/([\340-\357])([\200-\277])([\200-\277])/e","'&#'.((ord('\\1')-224)*4096 + (ord('\\2')-128)*64 + (ord('\\3')-128)).';'",$string);
$string = preg_replace("/([\300-\337])([\200-\277])/e","'&#'.((ord('\\1')-192)*64+(ord('\\2')-128)).';'",$string);
return $string;
}

scheint zu funktionieren, obwohl nicht sicher, ob es die optimale Lösung ist

UPDATE: 8. März um 15:45 Uhr

Der Zeichensatz von Oracle ist ISO-8859-1.
in PHP habe ich hinzugefügt:

putenv("NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1");

um die oci8-Verbindung zu zwingen, diesen Zeichensatz zu verwenden. Abrufen deré mit oci8 von PHP hat jetzt geklappt! (zumvarchars, aber nichtCLOBs musste tunutf8_encode um es zu extrahieren)
Also habe ich versucht, die Daten von PHP nach Oracle zu speichern ... und es funktioniert nicht ... irgendwo auf dem Weg von PHP nach Oracleé wird zu einer?

UPDATE: 9. März um 14:47 Uhr

Also näher kommen. Nachdem Sie die Variable NLS_LANG hinzugefügt haben, führen Sie direkte oci8-Einfügungen mit ausé funktioniert.

Das Problem ist eigentlich auf der PHP-Seite. Wenn Sie das ExtJs-Framework verwenden, wird es beim Senden eines Formulars mithilfe von codiertencodeURIComponent.
Damité wird gesendet als%C3%A9 und dann neu codiert iné.
Allerdings ist es jetzt Länge2 (strlen($my_sent_value) = 2) und nicht 1. Und wenn ich in PHP versuche: $ my_sent_value ==é = FALSCH

Ich denke, wenn ich in der Lage bin, alle diese Zeichen in PHP wieder in Längen von Byte Größe 1 zu kodieren und sie dann in Oracle einzufügen, sollte es funktionieren.

Trotzdem kein Glück

UPDATE: 10. März um 11:05 Uhr

Ich denke immer, ich bin so nah (und doch so weit weg).

putenv("NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P9"); arbeitet sehr sporadisch.

Ich habe ein kleines PHP-Skript zum Testen erstellt:

header('Content-Type: text/plain; charset=ISO-8859-1');
putenv("NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P9");
$conn= oci_connect("user", "pass", "DB");
$stmt = oci_parse($conn, "UPDATE temp_tb SET string_field = '|é|'");
oci_execute($stmt, OCI_COMMIT_ON_SUCCESS);

Nachdem ich dies einmal ausgeführt und mich direkt in die Oracle-Datenbank eingeloggt habe, sehe ich, dass STRING_FIELD auf gesetzt ist|¿|. Offensichtlich nicht das, was ich von meinen bisherigen Erfahrungen erwartet hatte.
Allerdings, wenn ich diese PHP-Seite zweimal schnell aktualisiere ... es hat funktioniert !!!
In Oracle habe ich richtig gesehen|é|.

Es scheint, als ob die Umgebungsvariable nicht richtig gesetzt oder rechtzeitig zur ersten Ausführung des Skripts gesendet wurde, aber für die zweite Ausführung verfügbar ist.

Mein nächstes Experiment besteht darin, die Variable in die PHP-Umgebung zu exportieren. Allerdings muss ich Apache dafür zurücksetzen ... also werden wir sehen, was passiert, hoffentlich funktioniert es.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage