비슷한 질문이 있지만 정상적인 해결책이 적합하지 않습니다. 아마도 나는 뭔가를 놓치고 있습니다. 내가 내 마음을 풀어하려고 해요 :. (((당신은 제목에서 이해할 수 있듯이php-oci8 인코딩 문제
, 나는 비 ASCII 내용과 오라클 데이터베이스가 I 조회 할/를 사용 PHP로 표시 OCI8. 모든
먼저, 데이터베이스 쿼리, 즉 ISO8859P9에
select parameter, value from v$nls_parameters where parameter in ('NLS_CHARACTERSET', 'NLS_LANGUAGE', 'NLS_TERRITORY')
반환
,938입니다따라서 NLS_LANG 변수를 적절하게 설정 했으므로 getenv ("NLS_LANG")는 "AMERICAN_AMERICA.WE8ISO8859P9"를 반환합니다.
나는 /etc/apache2/conf.d/charset 파일에 AddDefaultCharset ISO-8859-9
을 넣었고, 나는 항상 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-9">
을 PHP 파일의 html 내용의 머리 부분에 포함 시켰습니다. 따라서 방화자를 통해 확인하면 응답의 "Content-Type"헤더가 "text/html; charset = ISO-8859-9"라는 것을 알 수 있습니다.
마지막으로 /etc/php5/apache2/php.ini 파일에 default_charset = "ISO-8859-9"
이라는 줄이 있고 출력 phpinfo()의 핵심 섹션에서 default_charset이 ISO-8859-9임을 알 수 있습니다.
이 모든 것들을 수행 한 결과 문자 İ
이있는 문자열을 검색하고 에코하면 '?'로 표시됩니다. 그게 문제 야!!! select dump(nameofthatstring, 16)...
을 쿼리하면 해당 바이트 값이 DD, 즉 8859-9에 따라 올바르다는 것을 알 수 있습니다.
필자는 ı
문자를 양식에 입력하고 GET의 ajax를 통해 제출하면 % FD 즉 8859-9로 변환됩니다. 해당 값, 문제 없음.
내가 다시 코드화하고 에코하면 다시 확인하게됩니다. ı
이 표시됩니다. 그러나 (where ajax 요청을받은 후) where 절에 ı
을 포함하는 문자열이있는 쿼리를 사용하면 빈 세트가 반환됩니다.
그러나 CHR (253)을 사용하여 행을 선택하면 행이 올바르게 선택되지만 행을 다시 인쇄하면 '?' 문자.
정말 붙어 있습니다. 어떤 도움을 주시면 감사하겠습니다. 미리 감사드립니다.
편집 :
$database = "(DESCRIPTION= (ADDRESS= (PROTOCOL=TCP)(HOST=XXXX)(PORT=1521)) (CONNECT_DATA= (SERVER=dedicated)(SERVICE_NAME=sname)))";
첫째,이 시도 :
oci_pconnect($username, $password, $database, "AMERICAN_AMERICA.WE8ISO8859P9");
을하지만 해결되지 않았다, 그래서 나는 NLS_LANG 변수를 설정하고 다음과 같이 변경 :
oci_pconnect($username, $password, $database);
변경 사항 없음 ...이 같은 연결
php에서 oracle에 연결할 코드를 게시 할 수 있습니까? – Nelson