表单值传递的问题,很奇怪

bing1052 2006-01-19 03:13:04
查询页是一表单,主要代码如下

<%@ page contentType="text/html; charset=ISO8859_1" language="java" import="java.sql.*" errorPage="" %>
<form name="form1" method="post" action="show_city.jsp" onSubmit="return Form1_Validator(this)">
<table width="220" border=1 align=center cellpadding=0 cellspacing=0 bordercolor="#666666" bordercolordark="#FFFFFF">
<tr height="30">
<td width="110"><div align="center">中 文 名:</div></td>
<td width="110" ><div align="center"><input type="text" name="cn" size="12"></div></td>
</tr>
<tr height="30">
<td width="110"><div align="center">英 文 名:</div></td>
<td width="110"><div align="center"><input type="text" name="en" size="12"></div></td>
</tr>
<tr height="30">
<td colspan="2"><div align="center"><input name="提交" type="submit" value="查 询"></div></td>
</tr>
</table>
</form>

接收页面
<%@ page contentType="text/html; charset=ISO8859_1" language="java" import="java.sql.*" errorPage="" %>
<%@ include file="conn.jsp" %>
<%
String cn=request.getParameter("cn");
String en=request.getParameter("en");

String sql_temp="";

if ( !( cn==null || cn.equals("") ) )
{
sql_temp=sql_temp+" city_name_cn='"+cn+"' ";
}
if ( !( en==null || en.equals("") ) )
{
if (sql_temp!="") {sql_temp= sql_temp+" and ";}
sql_temp=sql_temp+" city_name_en='"+en+"' ";
}

if (sql_temp!="")
{
sql_temp=" where "+sql_temp;
}
%>
<body>
<%
String sql="select * from city "+sql_temp;
out.print(sql);
ResultSet rs=stmt.executeQuery(sql);

while(rs.next())
{
%>
您的第一个字段内容为:<%=rs.getString(0)%>
您的第二个字段内容为:<%=rs.getString(1)%>
<br>

<%
}
%>
<%rs.close();
stmt.close();
conn.close();
%>

比如说,我的数据表为city

c_name e_name
------- -------
桂林 GL

如果,我在查询页面en文本框内输入"GL",则可以正常显示
“您的第一个字段内容为:桂林 您的第二个字段内容为:GL”

但是,如果在cn文本框内输入“桂林”,则不能显示内容
可是,用out.print(sql);写出的SQL语句确是正确的,放在oracle里面也可以查到数据
就是不能执行while循环
请问大家这是什么回事
难道会是中文乱码,不会吧,用out.print(cn);他都可以显示“桂林”
实在是郁闷阿
请大家指教
谢谢了
...全文
65 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Samland 2006-01-19
  • 打赏
  • 举报
回复
真的是中文乱码。
因为你用了ISO8859码,因此out.print(cn);正常。但是传递到Oracle(默认编码是GBK)就乱了。
因此你需要对你接收的中文进行转换,如 cn = MyCharset.ISOtoGBK(cn);

....
function ISOtoGBK(String s) {
return new String(s.getBytes("ISO8859_1"),"GBK")
}

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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