千家信息网

怎么解决php连接oracle乱码问题

发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,本篇内容主要讲解"怎么解决php连接oracle乱码问题",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么解决php连接oracle乱码问题"吧!php连
千家信息网最后更新 2025年01月22日怎么解决php连接oracle乱码问题

本篇内容主要讲解"怎么解决php连接oracle乱码问题",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么解决php连接oracle乱码问题"吧!

php连接oracle乱码的解决办法:1、设置环境变量;2、获取oracle的字符集;3、通过"iconv('GBK','utf-8',$vo["USERNAME"]);"方法转换编码即可。

本文操作环境:Windows7系统、PHP7.1版、DELL G3电脑

如何解决php 连接oracle乱码问题?

PHP 连接Oracle及乱码问题笔记

1. PHP连接Oracle

步骤1. 提取Oracle Instant Client核心DLL

从OTN 的 Instant Client 页面下载用于 Windows 的 Instant Client Basic(11g) 程序包。此压缩文件的大小大约为 48MB。创建一个子目录(例如,c:\instantclient11_2),然后从压缩文件中复制以下库到apache\bin目录下:

oraociei11.dll orannzsbb11.dll oci.dll

这三个文件的总大小大约为 126MB。
要使用 PHP 老版本的"oracle"扩展(在 php.ini 中使用"extension=php_oracle.dll"启用),则复制 ociw32.dll 而非 oci.dll。

步骤2:编辑环境变量,将 c:\instantclient11_2 添加到 PATH 中(系统环境变量位于其他 Oracle 目录之前)。

例如,在 Win7 上,依次单击"计算机"->右键"属性"->"高级系统设置"->"高级"->"环境变量",编辑系统变量列表中的 PATH。
如果使用了 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

OCI8 Supportenabled
Version1.4.7
Revision$Id: bf2eaf558b050b6d2e6d098bed6345af7e842ea4 $
Active Persistent Connections0
Active Connections0
Oracle Run-time Client Library Version11.2.0.3.0
Oracle Instant Client Version11.2
Temporary Lob supportenabled
Collections supportenabled
DirectiveLocal ValueMaster Value
oci8.connection_classno valueno value
oci8.default_prefetch100100
oci8.eventsOffOff
oci8.max_persistent-1-1
oci8.old_oci_close_semanticsOffOff
oci8.persistent_timeout-1-1
oci8.ping_interval6060
oci8.privileged_connectOffOff
oci8.statement_cache_size2020

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乱码问题"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

乱码 变量 环境 问题 字符 编码 系统 字符集 方法 服务 文件 页面 内容 数据 步骤 中文 高级 操作系统 大小 实际 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全法提及个人隐私的是 青岛嵌入式软件开发服务费 mysql数据库两个表外连接 网络安全以案促改 北京网络安全等级测评 前端服务器运维 国家对计算机软件开发的政策支持 采血建数据库是怎么回事 信息网络安全技术的事件 网络安全教育主题班会图文 网络安全教育与培训制度 江苏大学图书馆数据库培训 防控新型网络安全风险 五华区智能化软件开发价格走势 国家网络安全管理内容 网络安全演讲稿3000字大学生 网络技术专业和移动网络技术 江西南昌网络安全师工资 好的软件开发公司口号 csgo官皮连接服务器失败 互联网企业是高科技企业吗 深圳云朵互联网科技有限公司 代理服务器韩国 boos直聘软件开发招聘 厦门市网络安全保障服务公告 荣昌县网络安全建设 网络安全信息分析报告 王振坤数据库 软件开发的简历表 安全养成目标网络安全
0