Die Datenbank verwendet Oracle, wenn Sie den Zeichensatz angeben, werden chinesische Zeichen verstümmelt angezeigt.
Schauen Sie sich das PHP-Handbuch an. Der vierte Parameter von oci_pconnect ist der Zeichensatz. Legen Sie einfach diesen Parameter fest.
Besorgen Sie sich zunächst den Zeichensatz von Oracle und führen Sie „SELECT * FROM V$NLS_PARAMETERS;“ aus. Die Variable NLS_CHARACTERSET entspricht dem von uns benötigten Zeichensatz. Daher lautet der endgültige PHP-Code:
$conn = oci_pconnect('scott','tiger', "(DEscriptION=(ADDRESS=(PROTOCOL =TCP)(HOST=192.168.0.1)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME=jocsbk)))", 'AL32UTF8');
Da lokale PHP-Dateien utf-8 einheitlich verwenden, ist die direkte Ausgabe normal. Es ist keine Transkodierung erforderlich.
Darüber hinaus muss laut relevanten Informationen eine Kodierungskonvertierung durchgeführt werden, wenn sich Ihre lokale Datei von dem Zeichensatz unterscheidet, der für die Verbindung mit Oracle verwendet wird.
while ($dat = oci_fetch_row($cur)) { print_r(iconv('gb2312', 'utf-8', $dat[0])); } //或者 while ($dat = oci_fetch_row($cur)) { print_r(mb_convert_encoding($dat[0], 'utf-8', 'gbk')); }
Es gibt eine andere Lösung, die ich aber noch nicht ausprobiert habe. Oracle kann Daten gemäß dem vom Client angegebenen Zeichensatz bereitstellen. Mit anderen Worten: Wenn meine lokale PHP-Datei UTF-8 verwendet, kann ich bei Verwendung von oci_connect direkt utf-8 angeben und sogar die Codierungskonvertierung wird gespeichert.
$c1 = oci_connect("scott", "tiger", $db, 'UTF8');