>백엔드 개발 >PHP 문제 >PHP에서 Oracle 인코딩을 설정하는 방법

PHP에서 Oracle 인코딩을 설정하는 방법

藏色散人
藏色散人원래의
2021-10-15 11:01:441527검색

PHP에서 Oracle 인코딩을 설정하는 방법: 1. Oracle의 문자 세트를 가져옵니다. 2. "select * from V$NLS_PARAMETERS;"를 실행합니다. 3. iconv 함수를 통해 인코딩을 변환합니다.

PHP에서 Oracle 인코딩을 설정하는 방법

이 문서의 운영 환경: Windows 7 시스템, PHP 버전 7.1, DELL G3 컴퓨터

PHP에서 oracle 인코딩을 설정하는 방법은 무엇입니까?

php는 oracle에 연결하여 문자 집합을 방지하도록 설정합니다. 잘못된 문자

데이터베이스로 oracle을 사용하세요. PHP가 oracle에 연결할 때 문자 집합을 지정하는 것이 가장 좋습니다.

PHP 매뉴얼을 확인하세요. oci_connect의 네 번째 매개변수는 charset입니다. 이것이 핵심입니다.

먼저 oracle의 문자 집합을 가져오고 "select * from V$NLS_PARAMETERS;"를 실행합니다. NLS_CHARACTERSET 변수는 필요한 문자 집합에 해당합니다. 예를 들어 여기서는 "ZHS16GBK"입니다. 따라서 최종 PHP 코드는 다음과 같습니다.

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

내 로컬 PHP 파일은 utf-8을 사용하므로 얻은 코드는 다음 인코딩 변환을 거쳐야 합니다.

while ($dat = oci_fetch_row($cur)) {
  print_r(iconv('gb2312', 'utf-8', $dat[0]));
}

Update:

동료들은 클라이언트가 Oracle을 지정할 수 있다고 말했습니다. 문자 집합은 데이터를 제공합니다. 즉, 내 로컬 PHP 파일이 UTF-8을 사용하는 경우 oci_connect를 사용할 때 UTF-8을 직접 지정할 수 있으며 인코딩 변환도 저장됩니다.

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

그리고 이상한 문제가 있습니다. 이전 인코딩으로 변환된 iconv는 테스트 머신 환경에서는 정상이지만, 원격 위치로 전송되면 정상적으로 구문 분석할 수 없습니다. 나중에 mb_convert_encoding으로 코드가 변경되었습니다.

$nickname = mb_convert_encoding($dat[0], 'utf-8', 'gbk');

가능한 이유는 iconv의 두 번째 매개변수에 "//IGNORE"가 추가되었는지 여부는 http://cn2.php.net/manual/en/function.iconv.php를 참조하시기 바랍니다. 관심이 있으시면 시도해 볼 수는 있지만 시도하지는 않겠습니다

또한 PHP DingSql에서 oracle 데이터를 쿼리하는 자체 패키지 방법을 첨부합니다 DingSql:

/**
* 封装接入oracle 执行sql语句查询
* @param sql
* @return false or string or array(array())
* @author xzz  2018年5月5日上午9:38:54
*/
function DingSql($sql = ''){
    header("Content-type: text/html; charset=utf-8");
    if(!$sql) return false;
    $conn= oci_connect('name', 'passwd', 'IP:PORT/serverName','zhs16gbk');
    if($conn) {
        $stid = oci_parse($conn, $sql); // 配置SQL语句,准备执行
        if (!$stid) {
            $e = oci_error($conn);
            print htmlentities($e['message']);
            exit;
        }
        $r = oci_execute($stid, OCI_DEFAULT); // 执行SQL。OCI_DEFAULT表示不要自动commit
        if(!$r) {
            $e = oci_error($stid);
            echo htmlentities($e['message']);
            exit;
        }
    
        $kkk = [];
        $i = '-1';
        while($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {//返回关联数据并创建null
            $i++;
            foreach($row as $key => $item) {
                $kkk[$i][$key] = iconv("gb2312", "utf-8//TRANSLIT", $item);
            }
        }
        oci_close($conn);
        return $kkk;    //二维关联数组
    }else{
        echo '连接oracle失败!';exit;
    }
}

추천 학습: "PHP 비디오 튜토리얼 "

위 내용은 PHP에서 Oracle 인코딩을 설정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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