PHP读取Oracle中文直接不显示

lz172074461 2014-09-02 12:04:33
System: Windows NT 5.1 build 2600 (Windows XP Professional Service Pack 3) i586
Oracle客户端 : Instant Client 11.2.0.3.0 (32-bit)
XP IIS: V5.1
PHP: 5.4.11
Compiler:MSVC9 (Visual C++ 2008)
Server API: CGI/FastCGI



代码:
<?php
$c = oci_pconnect("sys","aaa","//192.168.1.2/ORCL","ZHS16GBK");
if (!$c) {
$e = oci_error();
trigger_error('Could not connect to database: '. $e['message'],E_USER_ERROR);
}
$s = oci_parse($c, "select 名称 from 部门表 where ID=49");

if (!$s) {
$e = oci_error($c);
trigger_error('Could not parse statement: '. $e['message'], E_USER_ERROR);
}
$r = oci_execute($s);
if (!$r) {
$e = oci_error($s);
trigger_error('Could not execute statement: '. $e['message'], E_USER_ERROR);
}
echo "<table border='1'>\n";
$ncols = oci_num_fields($s);
echo "<tr>\n";
for ($i = 1; $i <= $ncols; ++$i) {
$colname = oci_field_name($s, $i);
echo " <th><b>".htmlentities($colname, ENT_QUOTES)."</b></th>\n";
}
echo "</tr>\n";
while (($row = oci_fetch_array($s, OCI_ASSOC+OCI_RETURN_NULLS)) != false) {
echo "<tr>\n";
foreach ($row as $item) {
echo " <td>".($item!==null?htmlentities($item,
ENT_QUOTES):" ")."</td>\n";
}
echo "</tr>\n";
}
echo "</table>\n";
var_dump($s,$c);
?>


这里中文都没有显示,查了了下ORALCE的编码是ZHS16GBK
...全文
287 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lz172074461 2014-09-03
  • 打赏
  • 举报
回复

浏览器自动的话是gb18030
xuzuning 2014-09-02
  • 打赏
  • 举报
回复
$r = oci_execute($s);
echo base64_encode(serialize(oci_fetch_array($s)));

贴出结果
xuzuning 2014-09-02
  • 打赏
  • 举报
回复
$s = 'YToyOntpOjA7czoxMToi16HUusTav8YoMikiO3M6NDoiw/uzxiI7czoxMToi16HUusTav8YoMikiO30='; //这是你内的数据 echo base64_decode($s); 得到 a:2:{i:0;s:11:"住院内科(2)";s:4:"名称";s:11:"住院内科(2)";} 显然是没有问题的! print_r(unserialize('a:2:{i:0;s:11:"住院内科(2)";s:4:"名称";s:11:"住院内科(2)";}')); Array ( [0] => 住院内科(2) [名称] => 住院内科(2) )
lz172074461 2014-09-02
  • 打赏
  • 举报
回复
客户端不是64位的,还有版本高了一点点,会不会是这个问题
lz172074461 2014-09-02
  • 打赏
  • 举报
回复
页面编码是GBK

如果 oci_pconnect的第四个参数改为"UTF8"
运行报错:
PHP Warning: oci_execute(): ORA-00911: 无效字符 in C:\Inetpub\wwwroot\oci8.php on line 14
PHP Warning: oci_fetch_array(): ORA-24374: 在读取或执行并读取之前没有完成定义 in C:\Inetpub\wwwroot\oci8.php on line 15
PHP Fatal error: Could not execute statement: ORA-24374: 在读取或执行并读取之前没有完成定义 in C:\Inetpub\wwwroot\oci8.php on line 18

这是ORACLE的字符集
xuzuning 2014-09-02
  • 打赏
  • 举报
回复
a:2:{i:0;s:11:"住院内科(2)";s:4:"名称";s:11:"住院内科(2)";} 没有问题! 你不会将页面编码设成 utf-8 的了吧? 那你连接数据库时也要设字符集为 utf-8 的了
lz172074461 2014-09-02
  • 打赏
  • 举报
回复

有点长,我把SQL语句改了下,只取某个部门的名称,执行结果是:
YToyOntpOjA7czoxMToi16HUusTav8YoMikiO3M6NDoiw/uzxiI7czoxMToi16HUusTav8YoMikiO30=

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧