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