Heim  >  Artikel  >  Backend-Entwicklung  >  PHP 连接 Oracle 出现中文乱码问题

PHP 连接 Oracle 出现中文乱码问题

巴扎黑
巴扎黑Original
2016-11-08 11:39:341540Durchsuche

数据库用 oracle,当 PHP连接 Oracle 的时候,如果指定字符集,会出现中文乱码。

查PHP手册,oci_pconnect  的第四个参数为 charset,只需设置这参数即可。

首先获取 Oracle 的字符集,运行“SELECT * FROM V$NLS_PARAMETERS;”,变量NLS_CHARACTERSET对应的就是我们需要的字符集,比如我这里就是 “AL32UTF8”。所以,最终的PHP代码为:

$conn = oci_pconnect('scott','tiger',
"(DEscriptION=(ADDRESS=(PROTOCOL =TCP)(HOST=192.168.0.1)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME=jocsbk)))",
'AL32UTF8');

由于本地的 PHP 文件统一用 utf-8 ,所以,直接输出就正常了。不用进行编码转换。

另外,据查询相关资料,如果你本地的文件跟连接 Oracle 的字符集不相同,还要进行编码转换。

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'));   
}

也有另外一种解决方式,但没试过。Oracle 可以按照 客户端指定的字符集 提供数据。也就是说,如果我本地PHP文件用UTF-8,那么,我在oci_connect的时候,直接指定utf-8就行了,连编码转换都省了。

$c1 = oci_connect("scott", "tiger", $db, 'UTF8');


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn