AJAX传中文参数乱码问题解决

2023-10-29

当利用XMLHttpRequest提交中文数据到服务器端时候,ajax默认编码为utf8,提交中文会发生乱码。为了解决这个问题,baidu了一天,研究了一天,现在把这些心得写下来,以备忘。(我这人健忘,^_^)

首先明确一点:要想彻底没有乱码的烦恼,那就将整个程序使用utf8编码吧。但是我们在php编程中却难免遇到中文乱码问题。

AJAX处理数据出现乱码从程序执行的过程来讲分为两种:

一种是发送给后台程序的中文本身就是乱码,因为zxmlHTTP沿用的是javascript的字处理机制,使用UTF-8编码。但是后台页面使用GB2312或者其它类型编码的话,接收到的数据自然就是乱码了。

另一种是接受到数据再返回的时候,出现字符乱码。这也是因为后台页面使用的编码和  Javascript编码不同造成的。服务器脚本返回的字符默认会使用服务器编码例如GB2312。

下面就来解决这两个问题:

(1)       服务器发回数据乱码的情况:

出现这种情况,我们只要在服务器发回数据的页面加上一个定义编码的文件头即可。 定义文件头信息的时候根据脚本的不同,可以使用以下方式:

  PHP:header("Content-Type:text/html;charset=GB2312"); 

  ASP:Response.Charset("GB2312")

JSP:response.setHeader("Charset","GB2312");

 

(2)  发送中文信息乱码的情况:

其实不管是怎样的编码,我们输入的中文字符都会被正确的以UTF-8格式发送到服务器端,只是在服务器接收的时候没有按照我们预期的方式去解码,而是使用了服务器默认的字符编码方式,通常是GB2312来解码信息。那我们看到的字符自然就是错误的。

我们都知道,XMLHTTP有两种发送数据的方式,一种是GET,一种是POST。

1、 GET的乱码问题:

这个解决起来比较简单,只要加上一个定义编码的Header信息即可:

setRequestHeader("Content-Type","text/html; encoding=gb2312");

这样客户端以GET方式发送到服务器去的数据会被服务器脚本正确的理解为GB2312方式,从而进行解码。

2、 POST的乱码问题:

比较难的部分是使用POST方法发送数据的时候,上面的方法就失效了。因为POST数据使用的Content-type使用的是:

xmlObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

没有定义字符编码的地方。我在这个问题的解决上遇到了很大的困难,但是目前已经找到一种比较好的解决方法。

首先在客户端,中文字符在发送到服务器端之前进行URL编码。也就是使用函数encodeURI():

   postStr = "remark=" + encodeURI(document. form1.remark.value);

       xmlhttp.open("POST", "./modules/mm/inventory/inv_adjustSubmit.php", true);

       xmlhttp.onreadystatechange = inv_response;

       xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");  

       xmlhttp.send(postStr);

 

然后在服务器端接收到值之后使用iconv()函数将字符串重新编码一下就好了!

header("Content-Type:text/html;charset=GBK");

$remark = iconv("UTF-8","GBK",$_POST["remark"]);

注意:此处使用GBK编码,是因为我们在连接数据库的时候使用

mysql_query("SET NAMES 'GBK'");//显示中文

     所以,如果此处改成GB2312,那么在插入中文数据到数据库中时会出现问题。

 

Warning:

1、为了使你的页面少写乱码的烦恼,最好在每个页面都加上编码:meta记得要在script脚本输出之前,否则有可能会乱码。

<head>

       <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

       <title> HPE Inventory System </title>

       <script type="text/javascript" src="js/jscalendar-1.0/calendar.js"></script>

</head>

2、记得在每个AJAX输出页面加上这句话:

header("Content-Type:text/html;charset=GB2312");

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AJAX传中文参数乱码问题解决 的相关文章

  • 如何使用 Connector/C++ 更新 MySQL 中的一行值

    我有一个简单的数据库 想要更新一个 int 值 我最初执行一个查询并返回一个 ResultSet sql ResultSet 对于结果集中的每个条目 我想修改表的一个特定列中的值 然后将其写回到数据库 更新该行中的该条目 根据文档 我不清楚
  • 是否可以在 php.ini 中指示 PHP 使用 postfix 配置?

    是否可以配置 PHP 使用 postfix 的配置集发送电子邮件 WordPress 通过 PHPMailer 依赖于 php ini 中的这些设置是否正确 SMTP localhost http php net smtp port smt
  • 登录页面上出现错误“警告:尝试访问 bool 类型值的数组偏移量”[重复]

    这个问题在这里已经有答案了 我目前正在为一个学校项目制作一个网站 并且正在制作一个用户注册系统 目前 注册部分与进入 MySQL 数据库的用户数据完美配合 但是 我的登录页面似乎已损坏 每次我尝试登录时都会收到以下错误 警告 尝试访问第 2
  • 是否可以从插件扩展 Wordpress XMLRPC 接口?

    是否可以创建一个插件 在激活时向 XMLRPC 接口添加新的 功能 并处理其调用 简而言之 是的 您可以将函数添加为插件或添加到主题的functions php 文件中来处理XMLRPC 调用 您将需要以下部分 function xml a
  • Chrome Javascript 调试器暂停时不会重新加载页面

    有时 当我在 Chrome 中调试某些 javascript 并且暂停了 javascript 时 如果我尝试重新加载页面 chrome 只会 继续 调试器 单步执行到下一个断点 似乎没有任何方法可以强制 javascript 完全停止运行
  • 对象数组 - 在 Vue.js 生态系统中更新对象的正确方法

    我不确定问题到底出在哪里 但我会看看是否有人可以帮助我理解我的代码出了什么问题 我正在利用 Vuex 商店来跟踪某些不断变化的状态 我这样做如下 import Vue from vue import Vuex from vuex Vue u
  • 将 JavaScript 引擎嵌入到 .NET 中 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 只是想知道是否有人尝试过将任何 js 引擎嵌入并实际集成到 net 环境中 我可以找到并实际使用 经过L
  • 使用 JavaScript 的计时器

    我想使用java脚本实现计时器 我想随着间隔的变化而减少计时器 Example假设我的计时器从 500 开始 我想要根据级别减少计时器 例如1 一级定时器应减1 且递减速度应较慢 2 2级定时器应递减2 递减速度应为中等3 3级定时器应减3
  • MySQL 的 TEXT 类型的 Oracle 等效项

    Oracle 是否有与 MySQL 等效的列类型TEXT type 如果不是 那么通常如何存储较大的文本块 BLOB varchar 32767 如果重要的话 它是通过 PHP 访问 Oracle 10 历史背景是非常受欢迎的 Oracle
  • Javascript 选择 onchange='this.form.submit()'

    我有一个带有选择和一些文本输入的表单 我希望在更改选择时提交表单 使用以下方法可以正常工作 onchange this form submit 但是 如果表单还包含提交按钮 则当选择更改时 表单不会提交 我猜有某种冲突 我在这里有什么选择
  • 如何在 angularjs 中修剪()字符串?

    有角度特定的方法吗 如果没有 我应该使用内置的jquery 来做到这一点吗 如果我应该使用内置的jquery 如何在不使用 的情况下访问trim 函数 或者这是必要的 编辑 是的 我知道 str trim 对不起 我需要这个才能在 IE 8
  • 理论上防止 WebSocket 中第一个收到的消息丢失

    服务器端代码发送消息立即地连接打开后 它向客户端发送初始配置 问候语 以下代码是在客户端 var sock new WebSocket url sock addEventListener error processError sock ad
  • 使用 Lodash 的 TypeScript:_.map(["123", " 234 "], _.trim) 返回 boolean[]?

    我有一个字符串数组 它们已像这样分割 var searchValue 600 800 123 180 var groups searchValue split gt 600 800 123 180 因此项目周围可能存在空格 并且我想删除空格
  • 使用 jQuery Tablesorter 操作后如何恢复当前页面?

    我正在使用 tablesorter 但无法找到有关插件 tablesorter 寻呼机的任何文档 问题是我有一个显示一些数据的表 并且在每一行中都有一个删除链接 该链接附加了要删除的元素的唯一标识符 显然 是否可以保存我正在删除的页面 然后
  • MySQL - 连接 a 或 b

    假设我有一个TABLE a其中一个COLUMN data是一个join其他 2 张桌子 TABLE b and TABLE c 因为我想得到一个COLUMN info in b or c 事情是a data将匹配only with b da
  • 有没有办法防止输入 type=“number” 获得多个点值?

    我只想得到十进制值 如 1 5 0 56 等 但它允许多个点 有什么办法可以预防吗 您可以使用pattern属性
  • FullCalendar 检查选择日是否有活动?

    我正在使用 Full Calendar js 插件 到目前为止一切顺利 但我想检查开始和结束之间的选择是否有事件 我只需要返回 true 或 false 基本上 如果日期选择中已经存在事件 我想阻止用户创建事件 var calendar c
  • 使用 Lodash 将对象键转换为具有键值数量的数组[重复]

    这个问题在这里已经有答案了 我有一个产品对象 products bread 1 milk 2 cheese 2 chicken 1 我想要一个包含产品名称的数组 如下所示 products bread milk milk cheese ch
  • 获取淘汰赛中被点击元素的索引

    获取无序列表中单击元素的索引的最佳方法是什么 让我举个例子 假设我有以下 HTML 代码 ul li p p li ul 现在我有以下 javascript 代码来获取索引 self itemClicked function data it
  • 使用 ActiveRecord 和 Yii2 记录实际的 SQL 查询?

    我正在这样做 students Student find gt all return this gt render process array students gt students 然后在视图中 foreach students as

随机推荐

  • Windows 环境下 Python3 安装 cryptography

    操作系统 win7 语言 Python 3 6 包 cryptography 3 4 7 因为工作需要 需要安装python的 cryptography包 但是屡次安装失败 特总结安装过程 以供大家借鉴 1 安装Rust 初次安装 cryp
  • 数字化变革的难点和解决方式

    了解了数字化企业的特征 还不代表企业能转型成功 从互联网1 0时期开始至今 中国传统 企业数字化转型十余年 整体效果并不理想 因为在推动转型过程中面临各种由于技能不足 和机制不足交织在一起形成的固有难点 转型推进难点 1 定义不清 这是企业
  • Sqlalchemy filter与filter_by查询语法

    摘要 https www cnblogs com kaerxifa p 13391722 html 摘要2 https blog csdn net gymaisyl article details 96601798 filter与filet
  • java部署和调用智能合约

    java部署和调用智能合约 下载安装npm和solc 1 安装gcc yum install gcc gcc c 2 安装node wget https npm taobao org mirrors node v10 14 1 node v
  • java中删除文件/文件夹的3种方法

    1 通过io删除文件 通过递归逐层删除文件信息 param filePath public static void deleteFileByIO String filePath File file new File filePath Fil
  • insert oracle用法,insert into select的实际用法,insertselect

    insert into select的实际用法 insertselect INSERT INTO SELECT语句 语句形式为 Insert into Table2 field1 field2 select value1 value2 fr
  • 【Linux】进程信号

    1 理解信号 1 信号 能够识别并做出行为的一种指令 2 信号来临的时候不一定能够立即对信号做出处理 但是并不影响信号的产生 3 信号来临 gt 时间窗口 gt gt 被处理 结果是要处理的但是需要时间 4 对待信号的处理方法 1 默认2
  • vue父组件向子组件传值

    子组件
  • JAVA IO流文本文件读入方法(read方法读入数据)

    在字符流通常都使用read方法读入数据 而read方法一般都两种调用方式 首先先创建一个文件 如Hello txt 里面输入HelloWorld 第一种是使用read的空参调用 read read 从输入流中读入一个字符 若当前位置无数据则
  • 进制转换方法

    常用计算机各进制的含义和相互之间的简单转换方法 文章目录 常用计算机各进制的含义和相互之间的简单转换方法 一 理解进制含义 1 二进制 2 八进制 3 十进制 4 十六进制 二 进制之间转换 1 1二进制转十进制 1 2十进制转二进制 除法
  • java--基础--17.7--线程--内存模型与线程

    java 基础 17 7 线程 内存模型与线程 1 内存模型 1 1 主内存和工作内存之间的交互 1 2 对于 volatile 型变量的特殊规则 关键字 volatile 是 Java 虚拟机提供的最轻量级的同步机制 一个变量被定义为 v
  • 微信小程序设置背景图铺满顶部

    由于微信小程序自带顶部导航栏 导致我们设置背景图时总是无法铺满顶部 其实想要铺满顶部只需要改变一个属性即可 将navigationStyle的默认属性修改为custom 在微信小程序需要设置背景图的文件下的 json文件中设置
  • VxWorks的环境配置

    转载请标记出处 http blog csdn net zgh1988 article details 7994538 1 准备工作 1 VMWare 2 一台安装Windows XP或Window 7系统的PC机 3 Tornado 2 2
  • 进阶训练技巧提升模型性能

    在深度学习的世界中 训练技巧的重要性不言而喻 进阶训练技巧 包括损失函数 学习率 模型微调和半精度训练 更是对提升模型性能和准确率有着关键作用 下面我们将对这些技巧进行详细的探讨 一 损失函数 Loss Function 损失函数 或者叫作
  • 遍历map

    keySet是键的集合 Set里面的类型即key的类型 entrySet是 键 值 对的集合 Set里面的类型是Map Entry 1 keySet Map map new HashMap Iterator it map keySet it
  • 代码审计之JAVA代码审计洞态IAST系统以及SecExample靶场

    目录 2 JAVA系列代码审计 2 1 工具介绍 2 2 SecExample靶场安装 2 3 洞态IAST安装 2 3 洞态IAST使用 2 JAVA系列代码审计 之前我们都是采用代码审计工具对PHP代码进行审计 但是在实际的工作中对于从
  • unipush2.0教程

    解释一下名词 透传消息 无论手机app 是否在运行 打开了 还是清了后台 关闭 都可以收到消息 通知消息 只能app打开了 才能收到 1 开通unipush 2 点击上图的unipush2 0下面的配置 进入以下页面 选择平台 将其余项配置
  • tidb存储基本原理

    tidb是什么 tidb是分布式关系型数据库 需要从两个方面来理解tidb 分布式数据库 关系型数据库 什么是分布式系统 集中式系统 计算和存储在同一个节点上 分布式系统 计算和存储位于不同的节点上 分布式系统把需要进行大量计算的工程数据分
  • Unity3D持久化存储(一) PlayerPrefabs

    文章目录 PlayerPrefabs介绍 常用方法 存储数据 读取数据 查看数据 删除数据 PlayerPrefabs介绍 PlayerPrefabs是Unity内置的持久化存储类 可存储Float Int和String类型的数据 数据存储
  • AJAX传中文参数乱码问题解决

    当利用XMLHttpRequest提交中文数据到服务器端时候 ajax默认编码为utf8 提交中文会发生乱码 为了解决这个问题 baidu了一天 研究了一天 现在把这些心得写下来 以备忘 我这人健忘 首先明确一点 要想彻底没有乱码的烦恼 那