Rumah  >  Artikel  >  hujung hadapan web  >  nodejs menyiarkan kod bercelaru

nodejs menyiarkan kod bercelaru

王林
王林asal
2023-05-24 09:07:36588semak imbas

Apabila menggunakan Node.js untuk membuat permintaan HTTP POST, kadangkala aksara bercelaru muncul selepas melepasi parameter Cina. Artikel ini akan berkongsi beberapa penyelesaian biasa.

Analisis Sebab

Apabila kami menyerahkan parameter Cina melalui permintaan HTTP POST dalam Node.js, jika tiada pengekodan dilakukan, parameter Cina akan dihantar ke pelayan dalam pengekodan UTF-8. Walau bagaimanapun, dalam beberapa kes, pelayan tidak dapat menghuraikan parameter Cina yang dikodkan UTF-8 dengan betul, mengakibatkan aksara bercelaru. Keadaan ini biasanya mempunyai sebab berikut:

  1. Format pengekodan tidak ditetapkan dengan betul pada bahagian pelayan. Jika pelayan tidak menetapkan format pengekodan dengan betul kepada UTF-8, ia tidak akan dapat menghuraikan parameter Cina yang dikodkan UTF-8 dengan betul yang dihantar daripada klien, mengakibatkan aksara bercelaru.
  2. Pelanggan tidak menetapkan pengepala permintaan dengan betul. Apabila kami membuat permintaan HTTP POST melalui Node.js, kami perlu menetapkan medan Jenis Kandungan dalam pengepala permintaan kepada application/x-www-form-urlencoded;charset=utf-8 untuk memberitahu pelayan bahawa parameter permintaan diterima adalah pengekodan UTF-8.
  3. Modul Node.js tidak mengendalikan pengekodan dengan betul. Dalam Node.js, sesetengah modul tidak menetapkan format pengekodan kepada UTF-8 secara lalai dan perlu dinyatakan secara manual. Jika pengekodan tidak dilakukan semasa menggunakan modul ini, aksara bercelaru akan berlaku.

Penyelesaian

Kaedah 1: Tetapkan format pengekodan bahagian pelayan kepada UTF-8

Kami boleh menetapkan format pengekodan bahagian pelayan kepada UTF-8 kepada Parse dengan betul parameter Cina yang dikodkan UTF-8 yang dihantar daripada klien. Dalam rangka kerja Express, kami boleh menetapkan format pengekodan kepada UTF-8 melalui kod berikut:

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

app.use(express.urlencoded({ extended: false }))
app.use(express.json())
app.use(function(req, res, next) {
  res.header('Content-Type', 'text/html; charset=utf-8')
  next()
})

Kaedah 2: Tetapkan pengepala permintaan kepada UTF-8

Kami boleh menetapkan permintaan dalam Node.js Medan Jenis Kandungan dalam pengepala ialah application/x-www-form-urlencoded;charset=utf-8 untuk memberitahu pelayan bahawa parameter permintaan yang diterima adalah dikodkan UTF-8. Apabila menggunakan perpustakaan axios untuk membuat permintaan HTTP POST, kita boleh menetapkan pengepala permintaan seperti ini:

const axios = require('axios')

axios.post('/api/posts', {
  title: '中文标题',
  content: '中文内容'
}, {
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
  }
}).then(res => {
  console.log(res)
}).catch(err => {
  console.log(err)
})

Kaedah 3: Pengekodan manual

Untuk sesetengah Nod yang tidak menetapkan pengekodan lalai kepada modul UTF-8. js, kami boleh melakukan pemprosesan pengekodan secara manual dan menukar parameter Cina kepada pengekodan UTF-8. Apabila menggunakan modul rentetan pertanyaan untuk pemprosesan pengekodan, kita boleh menggunakannya seperti ini:

const querystring = require('querystring')
const https = require('https')

const postData = querystring.stringify({
  title: '中文标题',
  content: '中文内容'
})

const options = {
  hostname: 'www.example.com',
  path: '/api/posts',
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Content-Length': Buffer.byteLength(postData)
  }
}

const req = https.request(options, res => {
  console.log(`statusCode: ${res.statusCode}`)

  res.on('data', d => {
    process.stdout.write(d)
  })
})

req.on('error', error => {
  console.error(error)
})

req.write(postData)
req.end()

Ringkasan

Apabila membuat permintaan HTTP POST Node.js, adalah perkara biasa untuk parameter Cina kelihatan bercelaru. Kami perlu menetapkan format pengekodan sebelah pelayan dengan betul, pengepala permintaan dan melakukan pemprosesan pengekodan secara manual untuk memastikan parameter Cina boleh dihantar dengan betul. Pada masa yang sama, apabila menggunakan beberapa modul Node.js, kita juga perlu memberi perhatian sama ada format pengekodan telah ditetapkan kepada UTF-8 secara lalai.

Atas ialah kandungan terperinci nodejs menyiarkan kod bercelaru. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn