>백엔드 개발 >PHP 튜토리얼 >PHP가 Oracle에 연결할 때 중국어 왜곡 문제가 발생합니다.

PHP가 Oracle에 연결할 때 중국어 왜곡 문제가 발생합니다.

巴扎黑
巴扎黑원래의
2016-11-08 11:39:341628검색

데이터베이스는 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');


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.