ADODB & Unicode mit Oracle DB

südpol

Erfahrenes Mitglied
Hi,

Ich habe eine Oracle 10g Datenbank die auf Unicode läuft, eine PHP Anwendung die via ADODB auf diese DB Zugreift. Der darunter liegende Linux Server spricht auch unicode. Auf der Webseite kommen aber nur Fragezeichen an. Bin zwischenzeitlich ratlos. Folgendes habe ich schon versucht:

Verbindung zur DB explizit auf Unicode eingestellt:
PHP:
define("ADODB_CHARSET", "AL32UTF8");
	$conn = &ADONewConnection('oci8');
	$conn->Connect(ADODB_HOSTADDRESS, ADODB_USER, ADODB_PWD, ADODB_SERVICENAME);
	$conn->charSet = ADODB_CHARSET;
	$conn->SetFetchMode(ADODB_FETCH_ASSOC);

Ausgabe direkt aus dem Code funktioniert:
PHP:
print("TEST - ??");

Insert und anschließendes Select führt (auch bei Umlauten) zu Fragezeichen:
PHP:
$value = array();
$value['STRING'] = "??";
$recordSet = $GLOBALS['adodb']->AutoExecute(DB_SCHEMA.".UNICODE_TEST", $value, "INSERT");

$value = array();
$value['STRING'] = "äöüüüß";
$recordSet = $GLOBALS['adodb']->AutoExecute(DB_SCHEMA.".UNICODE_TEST", $value, "INSERT");

$query = "SELECT * FROM ".DB_SCHEMA.".UNICODE_TEST";
$recordSet  = $GLOBALS['adodb']->Execute($query);
while($res = $recordSet->FetchNextObject()) {
	echo "<li>".$res->STRING."</li>";
}

Direkte Eingabe von Unicode Zeichen über den Oracle SQL Developer führt dazu, dass die Zeichen in der DB richtig angezeigt werden bei der Ausgabe auf der Webseite aber wieder als Fragezeichen dargestellt werden.

Hat jemand eine Idee was ich noch machen kann um das Problem einzugrenzen bzw. zu lösen?
 
Hast du auch die korrekten HTTP-Header gesendet, um dem Browser mitzuteilen, dass es sich um UTF-8-Output handelt:

PHP:
header('Content-Type: text/html; charset=utf-8');

Bitte darauf achten, das Header nur gesendet werden können, wenn noch kein anderer Output an den Browser gesendet wurde.
 
Jup, dass ist gesetzt und wird vor allem gesendet.

PHP:
header("Content-Type: text/html;charset=".DEFAULT_CHARSET."");

Der HTML Header wird natürlich auch gesetzt:
PHP:
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 
Zuletzt bearbeitet:
Ich hab da mal in Manual gesehen, bei ADODB, die setzen den Charset bevor sie den Connect ausführen. Das machst du offensichtlich anders herum. Ich würde die Abfolgen mal austauschen.
 

Neue Beiträge

Zurück