免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2185 | 回复: 0
打印 上一主题 下一主题

php操作oracle的编码问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-17 21:00 |只看该作者 |倒序浏览
common.php 代码:
<?php
function toUtf8($ar){
$c = "";
  foreach($ar as $val){
    $val = intval(substr($val,2),16);
    if($val < 0x7F){        // 0000-007F
        $c .= chr($val);
    }elseif($val < 0x800) { // 0080-0800
        $c .= chr(0xC0 | ($val / 64));
        $c .= chr(0x80 | ($val % 64));
    }else{                // 0800-FFFF
        $c .= chr(0xE0 | (($val / 64) / 64));
        $c .= chr(0x80 | (($val / 64) % 64));
        $c .= chr(0x80 | ($val % 64));
    }
  }
  return $c;
}
function uniDecode($str,$charcode){
  $text = preg_replace_callback("/%u[0-9A-Za-z]{4}/","toUtf8",$str);
  return mb_convert_encoding($text, $charcode, 'utf-8');
}
//$db_conn = ocilogon( "eastest", "eastest", "COG_192.168.0.3");
$db_conn = ocilogon( "eastest", "eastest", "//192.168.0.3/COG");
?>



sp.php 代码:
<?php
header("Content-Type: text/html; charset=UTF-8");
putenv("NLS_LANG=american_america.al32utf8");
if (!isset($_GET["n"])) {
print "";
exit;
}
$arrayResult = "[";
require 'common.php';
$name = uniDecode($_GET["n"],'UTF-8');
//echo $name;
$CmdStr = "SELECT FNAME_L2 FROM T_BD_Person WHERE FNAME_L2 LIKE '" . $name . "%'";
//"SELECT FNAME_L2 FROM T_BD_Person WHERE FNAME_L2 LIKE '" . $name . "%'";//, FEMAIL $name iconv("GB2312", "UTF-8","罗")
//echo "Test: ".$CmdStr ."\n";
$Parsed = ociparse($db_conn, $CmdStr);
ociexecute($Parsed);
$nRows = ocifetchstatement($Parsed, $Results);
$ds=ldap_connect("192.168.0.5");
//echo $nRows;
//echo $name;
if ($ds) {
$r=ldap_bind($ds);
for($i = 0; $i < $nRows; $i++) {
  //iconv("GB2312","UTF-8",$Results["FNAME_L2"][$i])
  $sr=ldap_search($ds, "o=zkz", "cn=".$Results["FNAME_L2"][$i]);
  $info = ldap_get_entries($ds, $sr);
  if ($info["count"]>0) {
   $arrayResult .= "\"" . $Results["FNAME_L2"][$i] . "<" . $info[0]["mail"][0] . ">\"";
   if ( $i != $nRows-1) $arrayResult .= ",";
  }
}
}
ldap_close($ds);
ocilogoff($db_conn);
$arrayResult .= "]";
print $arrayResult;
?>

客户浏览器使用JS脚本来访问获取:
var url = "/sp.php?n=" + escape(str);
xmlHttp.open("GET", url, true);
xmlHttp.onreadystatechange = UpdateSearchResult;
xmlHttp.send(null);
服务器sp.php中的:$name = uniDecode($_GET["n"],'UTF-8');通过uniDecode函数转换之后是中文,
但下面用oci函数却取不到一条数据,我使用了很多方法如用 iconv 将GB2312转换为UTF-8等之类的编码处理
我一直估计是编码的问题,但一直没办法解决。
另:用SQL*Plus通过上面的SQL语句是可以查出数据的,所以SQL语句是没有错的。


希望大家帮帮忙。谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP