php access以中文作为参数进行数据查询时出现乱码。

kpym 2014-01-22 03:36:11
先上代码:
<?php

include_once("Conn.php");

$testJSON=array();
$str = trim($_GET['dept']);

$mysql =" select *,0 as ord from checkpro where ifstop=0 and dept like '*".$str."*' ";

echo $mysql;

$rs = $conn->Execute($mysql);
while(!$rs->EOF)
{

$mydept =iconv('gb2312','utf-8',$rs->Fields['dept']->Value);
$mypro =iconv('gb2312','utf-8',$rs->Fields['pro']->Value);
$mynote =iconv('gb2312','utf-8',$rs->Fields['note']->Value);
$mykf =iconv('gb2312','utf-8',$rs->Fields['kf']->Value);

echo $mydept;

$testJSON[] = array('dept'=>"".$mydept."","pro"=>"".$mypro."","note"=>"".$mynote."","kf"=>"".$mykf."");
$rs->MoveNext();
}

foreach ( $testJSON as $key => $value ) {

foreach ( $testJSON[$key] as $key_k => $value_k ) {
$testJSON[$key][$key_k] = urlencode ($value_k);
}
}
echo urldecode ( json_encode ( $testJSON ) );

/*释放资源*/
$rs->Close();
$conn->Close();
$rs = null;
$conn = null;

?>


如果我在地址栏输入:
http://192.168.0.30:81/fkfs/jsons_a/json_deptchpro.php?dept=办公室
那么就会出现如图的错误,如果参数是英文的就不会。


如果我在地址栏输入:
http://192.168.0.30:81/fkfs/jsons_a/json_deptchpro.php?dept=通用
这时不会出现错误,这个参数得到的结果应该是正确的,但是却不显示任何记录。
问大家,这个该怎么解决,谢谢!
...全文
96 点赞 收藏 13
写回复
13 条回复
xuzuning 2014年01月22日
对呀,gbk 的串在 utf-8 环境中当然是“乱码”啦! 所以你在输出查询结果时不是转码了吗?
回复 点赞
kpym 2014年01月22日
引用 8 楼 xuzuning 的回复:
$str = iconv('utf-8', 'gbk', trim($_GET['dept'])); $mysql =" select *,0 as ord from checkpro where ifstop=0 and dept like '*".$str."*' "; $rs = $conn->Execute($mysql);
问题解决,结贴了,这个问题,造成的原因有两个: 第一个是地址栏里输入的值用iconv()转了的话,在前台用$mysql输出,还是会显示乱码,但其实作为查询来说,已经成功查询了。 第二个是,为什么没有查询结果,是由于语法有问题,如果在数据库直接进行like查询,是要用**而不是%%来进行的。但是在php里,是用%%才正确。 谢谢各位的帮助。
回复 点赞
kpym 2014年01月22日
引用 8 楼 xuzuning 的回复:
$str = iconv('utf-8', 'gbk', trim($_GET['dept'])); $mysql =" select *,0 as ord from checkpro where ifstop=0 and dept like '*".$str."*' "; $rs = $conn->Execute($mysql);
版主,用你的方法,$mysql输出的是乱码了: select *,0 as ord from checkpro where ifstop=0 and dept like '*�칫��*'
回复 点赞
kpym 2014年01月22日
引用 9 楼 xuzuning 的回复:
另外 $mysql =" select *,0 as ord from checkpro where ifstop=0 and dept like '*".$str."*' "; 为什么是 * 应该 $mysql =" select *,0 as ord from checkpro where ifstop=0 and dept like '%".$str."%' "; 才对
我用的是access数据库啊,用%是不可以的
回复 点赞
xuzuning 2014年01月22日
另外 $mysql =" select *,0 as ord from checkpro where ifstop=0 and dept like '*".$str."*' "; 为什么是 * 应该 $mysql =" select *,0 as ord from checkpro where ifstop=0 and dept like '%".$str."%' "; 才对
回复 点赞
xuzuning 2014年01月22日
$str = iconv('utf-8', 'gbk', trim($_GET['dept'])); $mysql =" select *,0 as ord from checkpro where ifstop=0 and dept like '*".$str."*' "; $rs = $conn->Execute($mysql);
回复 点赞
kpym 2014年01月22日
引用 3 楼 xuzuning 的回复:
错误信息显示:出错行是 21 行 请指出 21 行在哪里! 你贴出的代码中,21 行是 echo $mydept;,显然不是的 你对输出的数据做了编码转换(iconv('gb2312','utf-8',$rs->Fields['dept']->Value)) 显然页面是 utf-8 的 那么 $_GET['dept'] 也就是 utf-8 的了 据此,你不可能查找到中文相关的结果
大哥眼利,21行是这句: $rs = $conn->Execute($mysql); 不可能该怎么办啊?我想在一个表里找到关于这个部门的相关记录啊!这个条件是中文来的。
回复 点赞
xuzuning 2014年01月22日
string '办公室' (length=9) 显然是 utf-8 编码的! access 是 gbk 的 你如何能检索到正确数据?
回复 点赞
kpym 2014年01月22日
引用 1 楼 TottyAndBaty 的回复:
urlencode?
什么?
回复 点赞
kpym 2014年01月22日
引用 2 楼 zy205817 的回复:
$str = trim($_GET['dept']); var_dump($str);
结果是这个: string '办公室' (length=9)
回复 点赞
xuzuning 2014年01月22日
错误信息显示:出错行是 21 行 请指出 21 行在哪里! 你贴出的代码中,21 行是 echo $mydept;,显然不是的 你对输出的数据做了编码转换(iconv('gb2312','utf-8',$rs->Fields['dept']->Value)) 显然页面是 utf-8 的 那么 $_GET['dept'] 也就是 utf-8 的了 据此,你不可能查找到中文相关的结果
回复 点赞
码无边 2014年01月22日
$str = trim($_GET['dept']); var_dump($str);
回复 点赞
tottyandbaty 2014年01月22日
urlencode?
回复 点赞
发动态
发帖子
基础编程
创建于2007-09-28

9735

社区成员

14.0w+

社区内容

从PHP安装配置,PHP入门,PHP基础到PHP应用
社区公告
暂无公告