url 编码 js url传参中文乱码解决方案

关于“url 编码 js url传参中文乱码解决方案”的完整攻略,我可以提供以下内容:

什么是 URL 编码?

URL 编码(URL encoding)是对 URL 中非 ASCII 字符和特殊字符进行编码的过程,其中使用了一种编码规则。URL 编码可以确保 URL 中的所有字符在传输过程中都是安全的、可靠的。URL 编码规则如下:

  • 对于 ASCII 字符中的字母、数字和部分符号(-_.~),不做变动;
  • 对于非 ASCII 码点的字符,先将它转换成 UTF-8 编码,再将每个字节转换成十六进制,并在每个字节前添加 %,表示这是 URL 编码;
  • 对于一些需要特殊处理的字符,比如空格、+、/ 等,则也需要通过 URL 编码进行转义。

例如,字符串 "你好,世界" 在 URL 编码后成为了 %E4%BD%A0%E5%A5%BD%2C%E4%B8%96%E7%95%8C

URL 编码与 JavaScript

在 JavaScript 中,URL 编码和解码一般使用 encodeURIdecodeURI 函数、encodeURIComponentdecodeURIComponent 函数。其中,encodeURIComponent 函数可以将字符串中的所有非 ASCII 字符和特殊字符进行编码,例如:

const originalStr = "你好,世界";
const encodedStr = encodeURIComponent(originalStr);
console.log(encodedStr); // 输出:%E4%BD%A0%E5%A5%BD%2C%E4%B8%96%E7%95%8C

decodeURIComponent 函数可以将编码后的字符串进行解码,还原为原始字符串,例如:

const encodedStr = "%E4%BD%A0%E5%A5%BD%2C%E4%B8%96%E7%95%8C";
const decodedStr = decodeURIComponent(encodedStr);
console.log(decodedStr); // 输出:你好,世界

URL 传参中文乱码解决方案

当我们在 URL 中包含中文字符,并希望通过 GET 请求传递时,可能会遇到中文乱码的问题。为了避免这种情况,我们可以采取以下几种解决方案:

方案一:手动进行 URL 编码

我们可以手动将中文字符进行 URL 编码,然后在 GET 请求时将它们作为参数传递给服务器。例如:

const originalStr = "你好,世界";
const encodedStr = encodeURIComponent(originalStr);
const url = "https://example.com?str=" + encodedStr;

// 发送 GET 请求
fetch(url)
  .then(response => response.text())
  .then(data => console.log(data))
  .catch(error => console.error(error));

在服务器端,我们只需要对编码后的字符串进行解码,就可以得到原始的中文字符串:

<?php
$str = $_GET['str'];
$decodedStr = urldecode($str);
echo $decodedStr;
?>

方案二:使用 FormData 对象传参

另一种解决方案是使用 FormData 对象来进行传参。通过 FormData 对象,我们可以将需要传递的参数以键值对的形式添加到 FormData 中,然后在发送请求时将其作为第二个参数传递即可。例如:

const formData = new FormData();
formData.append("str", "你好,世界");

// 发送 POST 请求
fetch("https://example.com", {
  method: "POST",
  body: formData
})
  .then(response => response.text())
  .then(data => console.log(data))
  .catch(error => console.error(error));

在服务器端,我们可以直接从 POST 请求中获取参数,并将其作为中文字符串进行处理:

<?php
$str = $_POST['str'];
echo $str;
?>

示例

下面是一个完整的示例,可以演示如何通过 URL 编码和 FormData 对象来解决 URL 传参中文乱码的问题:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>URL 传参中文乱码解决示例</title>
</head>
<body>
  <button onclick="sendGetRequest()">发送 GET 请求</button>
  <button onclick="sendPostRequest()">发送 POST 请求</button>

  <script>
    function sendGetRequest() {
      const originalStr = "你好,世界";
      const encodedStr = encodeURIComponent(originalStr);
      const url = "https://example.com?str=" + encodedStr;
      fetch(url)
        .then(response => response.text())
        .then(data => alert("服务器返回:" + data))
        .catch(error => console.error(error));
    }

    function sendPostRequest() {
      const formData = new FormData();
      formData.append("str", "你好,世界");
      fetch("https://example.com", {
        method: "POST",
        body: formData
      })
        .then(response => response.text())
        .then(data => alert("服务器返回:" + data))
        .catch(error => console.error(error));
    }
  </script>
</body>
</html>

当用户点击“发送 GET 请求”或“发送 POST 请求”按钮时,就会向服务器发送 GET 或 POST 请求,并在页面上显示服务器返回的数据。在这个示例中,我们分别演示了使用 URL 编码和 FormData 对象的两种解决方案。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:url 编码 js url传参中文乱码解决方案 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • JSP建立错误页页面并自动跳转

    建立错误页页面并自动跳转的过程如下: 1. 创建错误页页面 在 JSP 项目中,我们可以通过创建一个名为 error.jsp 的 JSP 页面作为错误页页面。在 error.jsp 中,我们可以通过使用 JSP 的内置对象 exception 和 page 变量来输出错误信息,并提供用户回到网站主页的链接,如下所示: <%@ page language…

    JavaScript 2023年5月27日
    00
  • javaScript封装的各种写法

    JavaScript中的封装是面向对象编程中的重要概念之一,主要目的是为了保护数据和方法,防止被其他代码随意篡改。下面我会详细讲解JavaScript封装的各种写法。 JavaScript封装的各种写法 1. 构造函数 构造函数是创建对象的基础,可以使用函数封装对象的属性和方法,我们可以用this关键字指向当前对象,来实现对属性和方法的操作。下面是一个示例:…

    JavaScript 2023年6月10日
    00
  • JavaScript与JQuery框架基础入门教程

    JavaScript与JQuery框架基础入门教程 什么是JavaScript? JavaScript 是一种编程语言,通常用于在网页上添加交互性和动态性。不像 HTML 和 CSS,JavaScript 是一种脚本语言,它需要通过浏览器来解释和执行。JavaScript 是一种非常流行的编程语言,它的使用广泛,可用于开发网页、移动应用、游戏等。 JavaS…

    JavaScript 2023年5月18日
    00
  • js判断浏览器是否支持严格模式的方法

    判断浏览器是否支持严格模式,我们可以通过以下两种方法来实现。 方法一 我们可以使用try…catch语句,在try语句中编写一个无法在严格模式下执行的代码,然后在catch语句中捕获错误,如果没有捕获到错误就代表浏览器支持严格模式。 示例代码: var isStrictMode; try { eval("’use strict’; var x …

    JavaScript 2023年6月10日
    00
  • 深入理解JavaScript系列(44):设计模式之桥接模式详解

    这里是“深入理解JavaScript系列(44):设计模式之桥接模式详解”的完整攻略: 什么是桥接模式? 桥接模式是一种结构型设计模式,旨在将一个大类或一系列紧密相关的类拆分成抽象和实现两个独立的维度。通过这种方式,可以在不改变客户端代码的前提下,动态地组合和切换不同的抽象和实现部分,以满足不同的需求。 桥接模式的核心是将抽象部分与实现部分分离,它使用了组合…

    JavaScript 2023年6月11日
    00
  • 同一页面多个商品倒计时JS 基于面向对象的javascript

    同一页面多个商品倒计时JS 基于面向对象的javascript 在电商网站中,多个商品可能需要倒计时进行限时抢购,这就需要一个基于面向对象的JavaScript代码来实现同时倒计时多个商品的功能。 实现思路 倒计时插件封装:封装一个倒计时插件,基于面向对象的设计,实现倒计时功能。 商品对象封装:封装商品对象,其中包含了商品倒计时功能,以及与页面交互的方法。 …

    JavaScript 2023年6月10日
    00
  • 详解JavaScript原型对象的this指向问题

    下面我将详细讲解“详解JavaScript原型对象的this指向问题”的完整攻略。 原型对象的this指向问题 在JavaScript中,this代表的是函数的执行上下文。而原型对象的this指向则与常规函数的this指向有所不同,需要特别注意。 常规函数中的this指向 在常规函数中,this代表的是所属的对象。例如: const person = { n…

    JavaScript 2023年6月10日
    00
  • js获取浏览器基本信息大全

    获取浏览器基本信息是前端开发中比较常用的一个需求。通过 JavaScript 可以获取浏览器的类型、版本号、操作系统类型等信息。下面就来详细讲解一下如何获取浏览器基本信息。 获取浏览器类型和版本号 可以使用 navigator.userAgent 获取当前浏览器的 UserAgent 字符串,然后通过正则表达式匹配出浏览器类型和版本号。 // 获取浏览器类型…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部