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

yizhihongxing

关于“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日

相关文章

  • JS中的正则表达式及pattern的注意事项

    JS中的正则表达式及pattern的注意事项 在JS中,正则表达式是一个用于匹配字符串模式的对象,可以用来进行字符串的查找、替换、删除等操作,是一项非常重要的功能。在使用正则表达式的过程中,我们需要注意一些pattern的注意事项,下面就来详细介绍。 1. 正则表达式的基本语法 在JS中,我们可以通过使用RegExp对象来创建正则表达式,同时也可以使用字面量…

    JavaScript 2023年6月11日
    00
  • JS遍历页面所有对象属性及实现方法

    JS遍历页面所有对象属性及实现方法 在JavaScript中,对象是一个非常重要的概念,通过对象可以将多种类型的数据(属性)和方法(函数)组合到一起,实现对数据的封装和操作。在前端开发中,遍历页面中所有的对象属性是非常常见的需求,本文将介绍如何实现这一功能。 1. for…in循环 for…in循环是JavaScript中遍历对象属性的一种基本方法,…

    JavaScript 2023年5月27日
    00
  • js字符串的各种格式的转换 ToString,Format

    下面是JS字符串的各种格式的转换ToString,Format的完整攻略。 ToString 在JavaScript中,使用方法toString()可以把其他变量类型(除了undefined和null)转换成字符串。ToString方法有两种形式: 使用函数调用:toString() 使用String函数:String() 以下是两种形式的具体用法和示例说明…

    JavaScript 2023年5月28日
    00
  • JavaScript中Array对象用法实例总结

    JavaScript中Array对象用法实例总结 数组(Array)是JavaScript中常用的数据结构,由多个元素组成,每个元素可以是不同的数据类型。在JavaScript中,Array是一种内置对象,提供了多种方法和属性,使其使用非常灵活。 创建数组 JavaScript中创建一个数组可以使用以下两种方式: 使用字面量创建数组 let arr = [1…

    JavaScript 2023年5月27日
    00
  • js前端图片加载异常兜底方案

    针对JS前端图片加载异常兜底方案,以下是完整攻略: 1. 使用onerror事件 当图片加载出现异常时,浏览器会触发<img>标签的onerror事件。我们可以利用这个事件进行图片加载异常处理。 <img src="./image.png" onerror="this.src=’./default.png’&q…

    JavaScript 2023年5月28日
    00
  • js 正则表达式之test函数讲解

    JS正则表达式之test函数讲解 什么是正则表达式 正则表达式是一种强大的工具,用于在文本中进行搜索和替换操作。在JavaScript中,正则表达式是一个对象,可以执行各种文本操作。 正则表达式通常用于以下操作: 检查字符串是否符合某种模式 替换字符串中的特定字符 提取字符串中符合某种模式的部分 test函数的用法 在JavaScript中,正则表达式对象提…

    JavaScript 2023年6月10日
    00
  • 浅谈C#.NET、JavaScript和JSON

    浅谈C#.NET、JavaScript和JSON C#.NET C#.NET是由微软公司开发的一种多范式编程语言。它具有类型安全、面向对象、高性能和可维护性等特点。除了Windows操作系统外,它还支持跨平台开发,可以在Linux和macOS上编写应用程序。在C#.NET中,JSON(JavaScript Object Notation)可以方便地序列化和反…

    JavaScript 2023年5月27日
    00
  • 获取dom元素那些讨厌的位置封装代码

    获取DOM元素位置是Web开发中比较常见的操作,但是由于不同浏览器之间存在差异,所以封装获取DOM元素位置代码时需要注意一些细节。在以下步骤中,我们将展示如何获取DOM元素的位置并将其封装到一个函数中。 1. 获取元素位置 文档坐标(client coordinate):指相对于左上角(0, 0)位置的像素坐标,通过DOM节点的clientX和clientY…

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