url中文乱码,分页中乱码,textarea回车符回写

url传输乱码的解决方式
这里不针对在web服务器设置编码(考虑多个项目使用了不同的编码)
这里说一种解决方式
页面js代码
var queryVal = encodeURI(encodeURI("这里是需要传输的中文字符"));
var url = "..."+"?queryVal="+queryVal;
window.location = url;
//js里面需要传输两次加密操作,这里会默认加密成UTF-8的形式

下面是java里面的代码,先做一次解密操作(这里还原成可以识别认识的字符了),

String newQueryVal = "";
try{
queryVal = URLDecoder.decode(queryVal,"UTF-8");
}catch(Exception e){
logger.error("查询时候出现中文乱码,不能正常解析字符串,错误信息:"+e.getMessage());
}

处理完成后再做一次加密操作(一边回传到页面上为可以识别的字符,当然这里传输过去也是以百分号方式的字符了)
特别是当java中处理分页形式的时候,这样能够解决乱码问题
try{
queryVal = URLEncoder.encode(queryVal,"UTF-8");
}catch(Exception e){
logger.error("查询时候出现中文乱码,不能正常解析字符串,错误信息:"+e.getMessage());
}

综上,在没有统一设置字符编码的时候这样是一种解决方式,笔者所在的项目中就没有统一设置这样的字符编码,所以必须对有中文传输的url做这样一个特别处理

另外对于js中对于textarea值域中的回车符回显时候的初始化js操作,
不能直接赋值给js变量,而是先赋值给一个textarea隐藏域,通过这个隐藏域再赋值给真实域
例如这里有js赋值操作,不适用上面的直接复制,会引起js换行错误,而是采用下面的间接赋值方式,即先给一个隐藏域,再赋值给后面这个真实域
这里只是举例说明这样的应用,有人会说直接赋值给真实域即可,有些应用需要通过js赋值,这是需求
<s:iterator value="userList">
//document.getElementById("userinfo<s:property value='userId'/>").value = "<s:property value='userDescription'/>";
document.getElementById("userinfo<s:property value='userId'/>").value = document.getElementById("userinfotemp<s:property value='userId'/>").value;
</s:iterator>

<s:iterator value="userList">
<textarea name="userinfotemp<s:property value='userId'/>" id="userinfotemp<s:property value='userId'/>" style="display:none;"><s:property value='userDescription'/></textarea>
</s:iterator>

你可能感兴趣的:(应用服务器,Web)