js传中文参数controller里获取参数乱码问题解决方法


在JavaScript中向服务器(比如使用Node.js的Express框架)传递中文参数时,如果在controller(或称为路由处理函数)中获取到的参数出现乱码,这通常是因为字符编码的问题。最常见的是因为请求没有正确地设置`Content-Type`头,或者服务器没有正确处理这个头。

以下是一些可能的解决方法:

### 1. 确保前端发送请求时设置了正确的`Content-Type`

对于POST请求,确保发送请求时设置了`Content-Type: application/x-www-form-urlencoded; charset=UTF-8`(如果是表单数据)或`Content-Type: application/json; charset=UTF-8`(如果是JSON数据)。

#### 示例(使用`fetch`发送JSON数据):


fetch('http://yourserver.com/api/data', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json; charset=UTF-8',
    },
    body: JSON.stringify({ name: '张三', age: 30 }),
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));

### 2. 在服务器端正确解析请求体

对于Express框架,确保你已经安装了`body-parser`中间件(或在Express 4.16+版本中使用内置的`express.json()`和`express.urlencoded()`中间件),并且正确地设置了它们。

#### 示例(Express 4.16+):


const express = require('express');
const app = express();

// 用于解析application/json
app.use(express.json());

// 用于解析application/x-www-form-urlencoded
app.use(express.urlencoded({ extended: true }));

app.post('/api/data', (req, res) => {
    console.log(req.body.name); // 应该能正确打印中文
    res.send('Received');
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

### 3. 检查数据库的字符集设置

如果你将数据存储到数据库中,确保数据库的字符集(如MySQL的`utf8mb4`)和表的字符集设置能够支持中文。

### 4. 检查HTML页面的字符集

如果你是在HTML表单中提交数据,确保HTML页面的``已经设置,这样浏览器就会以UTF-8编码发送表单数据。

通过以上步骤,你应该能够解决JavaScript向服务器传递中文参数时出现的乱码问题。如果问题仍然存在,可能需要检查服务器或中间件的其他配置。