Oracle への PHP 接続が文字化けする場合の解決策: 1. 環境変数を設定する; 2. Oracle の文字セットを取得する; 3. Pass "iconv('GBK','utf-8',$vo["USERNAME 「]);」メソッドを使用してエンコードを変換します。
この記事の動作環境: Windows 7 システム、PHP バージョン 7.1、DELL G3 コンピューター
php の解決方法接続オラクル文字化けの問題?
Oracle への PHP 接続と文字化けに関する注意事項
1. Oracle への PHP 接続
Step 1. Oracle Instant Client Core DLL の抽出
OTN の Instant Client ページから Windows 用の Instant Client Basic (11g) パッケージをダウンロードします。この圧縮ファイルのサイズは約 48MB です。サブディレクトリ (c:\instantclient11_2 など) を作成し、次のライブラリを圧縮ファイルから apache\bin ディレクトリにコピーします。
oraociei11.dll orannzsbb11.dll oci.dll
これら 3 つのファイルの合計サイズは約 126MB です。
古いバージョンの PHP で「oracle」拡張機能を使用するには (php.ini の「extension=php_oracle.dll」を使用して有効にします)、oci.dll の代わりに ociw32.dll をコピーします。
ステップ 2: 環境変数を編集し、c:\instantclient11_2 を PATH に追加します (システム環境変数は他の Oracle ディレクトリの前に配置されます)。
たとえば、Win7 では、[コンピューター] をクリックし、[プロパティ] を右クリックし、[システムの詳細設定] -> [詳細設定] -> [環境変数] をクリックしてシステム変数を編集します。リスト内のパス。
tnsnames.ora ファイルを使用して Oracle Net サービス名を定義する場合は、tnsnames.ora を c:\instantclient11_2 にコピーし、ユーザー環境変数 TNS_ADMIN を c:\instantclient11_2 に設定します。
ステップ 3: php の oci8 拡張機能を開きます。php.ini を編集して OCI8 拡張機能を開き、コメント記号 ';' を削除します: extension=php_oci8.dll
Apache を再起動します。サーバーを再起動します (サーバーを再起動する必要があります。再起動しないと環境変数が有効になりません)
再起動後、phpinfo() を通じて次の内容が表示されれば、構成は成功です:
OCI8 サポート | 有効 |
バージョン | 1.4.7 |
##$Id: bf2eaf558b050b6d2e6d098bed6345af7e842ea4 $ | |
0 | |
0 | #Oracle ランタイム クライアント ライブラリのバージョン |
Oracle Instant Client バージョン | |
一時 Lob サポート | |
コレクションのサポート | |
oci8.connection_class | 値がありません | |
---|---|---|
値がありません | oci8.default_prefetch | 100 | 100
oci8.events | オフ | オフ |
oci8.max_persistent | -1 | -1 |
##oci8.old_oci_close_semantics | Off | Off |
##-1 | #-1oci8.ping_interval | |
60 | oci8.privileged_connect | |
Off | oci8.statement_cache_size | |
20 |
2. PHP Oracle 中文乱码问题 通常缺省配置连接Oracle在处理中文时都会遇到乱码问题,其实绝大部分人都知道在客户端连接Oracle服务端前首先要在客户端正确的设置服务端的字符集信息,通过PLSQL运行“select * from V$NLS_PARAMETERS;” 即可获取oracle的字符集,变量NLS_CHARACTERSET对应的就是我们需要的字符集,比如我这里就是“WE8ISO8859P1” 设置字符集的方法如下: 方法一: 连接前设置环境变量 putenv("NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1"); $conn=oci_new_connect($config['username'], $config['password'],$config['database']); 方法二:连接时设置环境变量 $conn=oci_new_connect($config['username'], $config['password'],$config['database'],'we8iso8859p1'); 但是很快你会发现通过上述设置读取的中文数据在不设置编码的情况下可以正常显示,而一旦在页面(假如页面的字符集为UTF8)中使用则仍为乱码, 并且即便做转换 从 we8iso8859p1 -> utf-8 依旧为乱码。 其实仔细研究后发现oci8 以数据库编码WE8ISO8859P1获取数据后 自动转换为操作系统缺省的编码格式,假如我使用的操作系统缺省编码为GBK,则实际上通过OCI8读取后,字符的编码即为GBK, 因此在页面使用的时候编码转换应该为 从 GBK -> utf-8 : echo iconv('GBK','utf-8',$vo["USERNAME"]); 推荐学习:《PHP视频教程》 |
以上がOracleへのPHP接続の文字化け問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。