- 论坛徽章:
- 0
|
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语句是没有错的。
希望大家帮帮忙。谢谢! |
|