如何解决WebService参数传递html传递参数中文乱码码问题

php 调用 webservice 中文乱码解决方案
由于工作的需要,帮我的同事阿韬测试一下.net的webservice在PHP下的应用.于是开始上网找资料,发现很多php教程er都是用nusoap.于是下载一个回来.用它自带的例子修改一下.可在文章的后面的附
由于工作的需要,帮我的同事阿韬测试一下.net的webservice在PHP下的应用.于是开始上网找资料,发现很多php教程er都是用nusoap.于是下载一个回来.用它自带的例子修改一下.可在文章的后面的附件中找到下载地址.代码如下:
如果我的webservice返回的内容中没有中文的话,则很简单就上面的例子就成功了.但是一个新的问题出现了,如果我的webservice中有中文的话,返回的值就变成了乱码.查看了一下response的结果,是正确的.应该是用nusoap处理的时候出现了问题.
由于我没有安装PHP断点调试工具(其实我都不知道有没有这个工具).所以只能一个方法,一个方法看.看了一天,终于看完了.更改了nusoap.php两个地方就OK了.
更改的地方:
86行的:var $soap_defencoding = 'UTF-8';
4998行的:var $decode_utf8 =
不更改也可以,不过在调用的时候就必须指定编码.
这样的效果也是一样的,如果请求的时候参数有中文,只需用post或者get的方式传送就可以了,如果需要将带有中文的参数写在代码里面,则需要把编码转成UTF8.可能参考附件.
nusoap源文件: /Files/coolstr/nusoap.zip
各种编码转换源文件: /Files/coolstr/chinese.zip
&(责任编辑:最模板)
------分隔线----------------------------
如何删除shopex后台客服服务、购买咨询、帮助、授权...
有时候可变的变量名会给编程带来很大的方便,也就是说变量名可...
header()函数在php的使用很大,下面我来介绍利用它实现页面缓存的...
前段时间在做一个中奖的活了,其中就用到中奖之后把数据写入...
在PHP 5.3.6及以前版本中,并不支持在DSN中的charset定义,而应该使用...
CopyRight (C)
最模板 , 深圳奇好科技有限公司 All Rights Reserved.如何解决WebService参数传递中文乱码问题 - ye.fengyu - 博客园
1,问题由来 &&&&&&& 我的主要工作是负责统一适配平台这块,主要任务是提供给客户统一的调用接口,客户使用这个接口可以通过我们再调不同厂家的接口。主要流程如下: &&&&&&&
&&&&&& 现在客户那边传来的请求报文里面包含中文,使用webservice发送一般是用UTF-8,但是客户那边传来的请求的格式肯定不是的,不然也不会出现中文乱码:&&&&&&
2,解决之法 &&&&& 在北向处理的流程中,在接收到客户传来的报文的时候进行编码转换。加上下面两个方法,在得到客户请求报文时只需调用第一个方法转换一下即可。
//中文字符处理
public String charSetConvert(String xmlRequest){
String charSet = NeopServerImpl.getEncoding(xmlRequest);
byte[] b = xmlRequest.getBytes(charSet);
xmlRequest = new String(b, "UTF-8");
} catch (Exception e) {
logger.error("输入的内容不属于常见的编码格式,请再仔细核实", e);
return xmlR
public static String getEncoding(String str) {
String encode = "GB2312";
if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是GB2312
String s =
return // 是的话,返回GB2312,以下代码同理
} catch (Exception e) {
logger.error("getEncoding异常---GB2312", e);
encode = "ISO-8859-1";
if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是ISO-8859-1
String s1 =
return s1;
} catch (Exception e) {
logger.error("getEncoding异常---ISO-8859-1", e);
encode = "UTF-8";
if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是UTF-8编码
String s2 =
return s2;
} catch (Exception e) {
logger.error("getEncoding异常---UTF-8", e);
encode = "GBK";
if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是GBK
String s3 =
return s3;
} catch (Exception e) {
logger.error("getEncoding异常---GBK", e);
return ""; // 到这一步,你就应该检查是不是其他编码啦
注:以上部分代码参考网上资源:webservice传递特殊字符时的解决办法 - 推酷
webservice传递特殊字符时的解决办法
webservice soap报文是xml格式交互的,其中针对特殊字符传递无法解析,导致数据处理失败。
解决办法如下:
1、在发送报文之前,针对报文进行base64转码,转义后避免报文中含有特殊字符。
标准base64中是以%开头的,如果存储到数据库中,并进行查询sql中,会解析成通配符,这样会报错。
搜索后使用改进版base64进行转码,可以规避该问题,具体度娘一下吧。
此方法的缺点是,所有客户端都需要知道解码的方式,否则无法解析。
2、在xml中,使用cdata标记特殊字符,这种方式经分析后不太好。
目前的缺点有2,一是需要针对每个特殊字符都转换一下,首先是本人不知道应该在什么使用添加
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致URL传递中文参数中乱码问题的解决方案 - JavaScript,EXT - web - ITeye论坛
URL传递中文参数中乱码问题的解决方案
锁定老帖子
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
等级: 初级会员
来自: 宜昌
发表时间:&&
相关知识库:
乱码问题对每个程序员来说,都是曾经的一个伤疤。尤其是做J2EE的新手,这问题总在我们周围晃悠。起初是表单提交到action中乱码(最后到数据库当然是乱码),表面上看可能是数据库编码设置问题,但当我们正确设置数据库编码后仍然发现最后还是乱码,接着又认为是页面编码设置不统一而导致提交表单后出现乱码,这个火星人都知道,结果问题依然存在。这时我们又想到可能是提交时post到服务器导致的乱码,也正确,于是我们想到了将字符串转码。问题也能解决,但不能说每次提交我们都要将字符串转码吧,如果是这样,可能谁都不想干coding这行了,光花在这上面的时间,就虚度了大半光阴。后来,我们知道有了过滤流这玩意,所有乱码问题顿时成为往事。加个过滤器搞定一切乱码,从此我们不再烦恼。顿时想起“奇强”牌某某粉,过滤流==奇强。
正当我们以为不会再被乱码头疼的时候。ajax技术兴起了,那个爽啊,玩的不亦乐乎。ajax中经常用到url来传递参数,中文参数的更是用的日趋广泛。搞个ajax检索,需要吧,用了google的搜索她们都说好,我们能不用吗,怎么说也不能落后于潮流吧。新技术来了,老毛病也来了。在GBK GB2312编码的页面中使用ajax, 用url传递参数,结果提交的都是乱码。难道过滤流毛病了?这个不想做过多评论.问题总要想办法解决,网络中惊呼"url中传递参数乱码如何解决啊?","url中传递参数避免乱码的方案"。我只想说一句,"问题总能解决"。
 废话够了,转如正题.
 比如ajax请求的url="searchPeoBySomeWords.do?KeyWord="+obj.我们需要用escape函数来将中文参数“包装”两下,看清楚是两下,不是一下。url="searchPeoBySomeWords.do?KeyWord="+escape(escape(obj.value))。那么这样“包装”后我们如何在action中来解码了,不要急,一个java方法就能解决问题(代码如Escape.java)。action中我们只要用Escape.java中的unescape静态方法就可解码。String keyWord = Escape.unescape(request.getParameter("KeyWord")).trim();原来拆开"包装"后,依然是我们可爱的中文。
package com.ctgusec.oaP
public class Escape{
private final static String[] hex = {
"00","01","02","03","04","05","06","07","08","09","0A","0B","0C","0D","0E","0F",
"10","11","12","13","14","15","16","17","18","19","1A","1B","1C","1D","1E","1F",
"20","21","22","23","24","25","26","27","28","29","2A","2B","2C","2D","2E","2F",
"30","31","32","33","34","35","36","37","38","39","3A","3B","3C","3D","3E","3F",
"40","41","42","43","44","45","46","47","48","49","4A","4B","4C","4D","4E","4F",
"50","51","52","53","54","55","56","57","58","59","5A","5B","5C","5D","5E","5F",
"60","61","62","63","64","65","66","67","68","69","6A","6B","6C","6D","6E","6F",
"70","71","72","73","74","75","76","77","78","79","7A","7B","7C","7D","7E","7F",
"80","81","82","83","84","85","86","87","88","89","8A","8B","8C","8D","8E","8F",
"90","91","92","93","94","95","96","97","98","99","9A","9B","9C","9D","9E","9F",
"A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","AA","AB","AC","AD","AE","AF",
"B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","BA","BB","BC","BD","BE","BF",
"C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","CA","CB","CC","CD","CE","CF",
"D0","D1","D2","D3","D4","D5","D6","D7","D8","D9","DA","DB","DC","DD","DE","DF",
"E0","E1","E2","E3","E4","E5","E6","E7","E8","E9","EA","EB","EC","ED","EE","EF",
"F0","F1","F2","F3","F4","F5","F6","F7","F8","F9","FA","FB","FC","FD","FE","FF"
private final static byte[] val = {
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F
public static String escape(String s) {
StringBuffer sbuf = new StringBuffer();
int len = s.length();
for (int i = 0; i & i++) {
int ch = s.charAt(i);
if (ch == ' ') {
sbuf.append('+');
} else if ('A' &= ch && ch &= 'Z') {
sbuf.append((char)ch);
} else if ('a' &= ch && ch &= 'z') {
sbuf.append((char)ch);
} else if ('0' &= ch && ch &= '9') {
sbuf.append((char)ch);
} else if (ch == '-' || ch == '_'
|| ch == '.' || ch == '!'
|| ch == '~' || ch == '*'
|| ch == '\'' || ch == '('
|| ch == ')') {
sbuf.append((char)ch);
} else if (ch &= 0x007F) {
sbuf.append('%');
sbuf.append(hex[ch]);
sbuf.append('%');
sbuf.append('u');
sbuf.append(hex[(ch &&& 8)]);
sbuf.append(hex[(0x00FF & ch)]);
return sbuf.toString();
public static String unescape(String s) {
StringBuffer sbuf = new StringBuffer();
int i = 0;
int len = s.length();
while (i & len) {
int ch = s.charAt(i);
if (ch == '+') {
sbuf.append(' ');
} else if ('A' &= ch && ch &= 'Z') {
sbuf.append((char)ch);
} else if ('a' &= ch && ch &= 'z') {
sbuf.append((char)ch);
} else if ('0' &= ch && ch &= '9') {
sbuf.append((char)ch);
} else if (ch == '-' || ch == '_'
|| ch == '.' || ch == '!'
|| ch == '~' || ch == '*'
|| ch == '\'' || ch == '('
|| ch == ')') {
sbuf.append((char)ch);
} else if (ch == '%') {
int cint = 0;
if ('u' != s.charAt(i+1)) {
cint = (cint && 4) | val[s.charAt(i+1)];
cint = (cint && 4) | val[s.charAt(i+2)];
cint = (cint && 4) | val[s.charAt(i+2)];
cint = (cint && 4) | val[s.charAt(i+3)];
cint = (cint && 4) | val[s.charAt(i+4)];
cint = (cint && 4) | val[s.charAt(i+5)];
sbuf.append((char)cint);
return sbuf.toString();
等级: 初级会员
来自: 上海
发表时间:&&
这个方法是在是太笨了
请登录后投票
来自: 北京
发表时间:&&
为什么不用 (char)Integer.parseInt(XXXX)
请登录后投票
等级: 初级会员
发表时间:&&
对中文参数用encodeUriComponent方法即可解决这个问题
请登录后投票
等级: 初级会员
来自: 沈阳
发表时间:&&
encodeURI(encodeURI(...))
请登录后投票
跳转论坛:移动开发技术
Web前端技术
Java企业应用
编程语言技术温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(6474)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'解决javaweb传输JSON数据过程中的中文乱码问题',
blogAbstract:'今天晚上一直在调试Android程序,利用webservice做数据库操作时,传输中文数据到手机上却无法正常显示,出现这种问题将采取以下措施解决:\r\nresponse.setContentType(\"text/json\"); &&&&&&&&& /*设置字符集为\'UTF-8\'*/\r\n&response.setCharacterEncoding(\"UTF-8\"); ',
blogTag:'json,android,中文乱码',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:4,
permalink:'blog/static/',
commentCount:2,
mainCommentCount:1,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}

我要回帖

更多关于 js传递中文参数乱码 的文章

 

随机推荐