求助:表单中文,request.setEncoding('utf8') 乱码
发布于 11 年前 作者 lgyhitler 22944 次浏览 最后一次编辑是 8 年前

场景:前台一个简单的form 登陆页 提交姓名,汉字。用firebug观察post请求如下:

参数application/x-www-form-urlencoded
age	
name	王
源代码
name=%E7%8E%8B&age=

可见浏览器对汉字进行了UTF-8的URL编码。 后台nodejs服务器 代码:

 function queryName(response, request){
	var postData = "";
	request.setEncoding('utf8');
	request.addListener("data", function(postDataChunk){
		postData += postDataChunk;
		console.log("Received POST data chunk '"+postDataChunk+"'.");
	});
	request.addListener("end", function(){
		console.log("完成:"+params.name);
	});
}

request.setEncoding(‘utf8’);后依然是, name=%E7%8E%8B&age= 求真相。

6 回复

前台用了它再试试,encodeURIComponent

<html>  
<head>  
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />  
</head>  
<body>  
    <form action="/queryName" method="post">  
        用户名:<input type="text" name="name"> </br> 
		年龄:<input type="text" name="age"></br>  
        <input type="submit" value="登录">  
    </form>  
</body></html>

仅仅是个表单提交啊,如何用得encodeURIComponent呢

目前的解决方案是 在后端 用

decodeURIComponent()

貌似post请求放在body中浏览器不会进行编码吧?另外@suqian 所说,decodeURIComponent外面套一个try

request.setEncoding('utf8')这是针对字节流对字符解码,UTF-8的URL编码是遵循x-www-form-urlencoded格式,两者有关系么。nodejs没对URL编码的内容自动解码,怎么都不可能怪到setEncoding的身上。

楼上分析的有道理,我试了一下正常的form表单提交,用firebug看发现汉字也都是进行了URL编码,可能是经过tomcat服务器时候进行了解码处理然后传到后台的。跟nodejs确实不一样。果然还得适应一下。谢谢各位指点,涨姿势了

回到顶部