url中文乱码解决大全

合集下载

php中url地址栏传参数中文乱码解决方法汇总

php中url地址栏传参数中文乱码解决方法汇总
lc_ctype=”zh_cn.utf-8″
lc_numeric=”zh_cn.utf-8″
lc_time=c
lc_collate=c
lc_monetary=”zh_cn.utf-8″
lc_messages=”zh_cn.utf-8″
lc_paper=”zh_cn.utf-8″
lc_name=”zh_cn.utf-8″
使用$gonghui = iconv(“gb2312″,”UTF-8″,$gonghui);另一方法代码
/* 多字节字符串编码转换函数
*
* @param string str 需要进行编码转换的字符串
* @param string to_encoding 指定转换为某种编码,如:gb2312、gbk、utf-8等
mb_convert_encoding 函数为php内部多字节字符串编码转换函数,可以在有需要的使用场合,几乎支持所有编码。PHP >= 4.0.6、 5 版本支持。
直接获取 reg.php?gh=某某;
//工会登入参
$gonghui = $_GET['gh'];
获得的$gonghui 为gb2312编码 输出到utf-8网页上显示乱码
$ChineseName=”我的名字,是中文的哦”;
$EncodeStr=urlencode($ChineseName);
echo “<a href=/cgi/personal.cgi?name=$EncodeStr>我的名字</a>”;
?>
url解码
还原 URL 编码字符串。
语法: string urldecode(string str);

URL地址中的中文乱码问题的解决

URL地址中的中文乱码问题的解决

URL地址中的中⽂乱码问题的解决引⾔:在Restful类的服务设计中,经常会碰到需要在URL地址中使⽤中⽂作为的参数的情况,这种情况下,⼀般都需要正确的设置和编码中⽂字符信息。

乱码问题就此产⽣了,该如何解决呢?且听本⽂详细道来。

1. 问题的引出在Restful的服务设计中,查询某些信息的时候,⼀般的URL地址设计为: get /basic/service? keyword=历史,之类的URL地址。

但是,在实际的开发和使⽤中,确是有乱码情况的发⽣,在后台的读取keyword信息为乱码,⽆法正确读取。

2. 乱码是如何产⽣的?由于我们利⽤URL传递参数这种⽅式是依赖与浏览器环境中的,也就是说URL及URL中包含的各个key=value格式的传递参数键值对参数是在浏览器地址栏中的处理原理处理相应编码后传递⾄后台进⾏解码的。

由于我们没有进⾏任何处理,此时javascript请求URL并传参数存在中⽂时(也就是说输⼊框中输⼊中⽂时),对URL的中⽂参数进⾏编码是按照浏览器机制进⾏编码的。

此时编码存在乱码问题。

3. 初次编码, javascript中利⽤encodeURI()⽅法进⾏编码。

利⽤encodeURI()在javascript中对中⽂URL参数进⾏编码时,“测试”⼆字会被转换为“%E6%B5%8B%E8%AF%95”。

但是问题依然存在。

原因是在编码后的字符串信息,浏览器机制会认为“%”是⼀个转义字符,浏览器会把地址栏URL中的传递的已转换参数“%”与“%”之间的已转义字符进⾏处理传递到后台中。

这样会造成与实际经过encodeURI()编码后的URL不符,因为浏览器误认为“%”是转义字符字符了,它并未将“%”认为是个普通字符。

4. ⼆次编码,使⽤encodeURI操作: encodeURI(encodeURI("/order?name=" + name));处理后的URL不在是通过⼀次 encodeURI()转换后的字符串”%E6%B5%8B%E8%AF%95“,⽽是经过上⼀步两层encodeURI()处理URL处理后的字符串”%25E6%B255%258B%25E8%AF%2595“,通过再次编码原有被浏览起解析为转义字符的”%“被再次编码,转换成了普通字符转”%25“。

c#或jsurl传参中文乱码解决方案

c#或jsurl传参中文乱码解决方案
网络错误503请刷新页面重试持续报错请尝试更换浏览器或网络环境
c#或 jsБайду номын сангаасrl传参中文乱码解决方案
c#或js url传参中文乱码解决方案 (2009-01-20 10:52:58)
c#; 当我们用url传参是,比如index.aspx?id=我,当参数值为汉字时,经常会遇到乱码的情况,现总结一下有一下这几种解决方法: 1.配置文件web.config中 在节中加上整个网站的编码方式,代码如下: 查看代码.doc 这样参数就以gb2312的中文编码方式传输了。而一般默认是utf-8. 2.在传参是先编码在传输,接受时先编码,在接收。 string mm=Server.URLEncode(你); Response.Redirect(index.aspx?mm=+mm); 然后在接收页解码: string mm = Server.URLDecode(Requext.querystring(mm)); js: 传参:用encodeURI("url参数")将url编码 收参:用decodeURI("接收到的值")解码

Js的Url中传递中文参数乱码,如何获取Url中参数问题

Js的Url中传递中文参数乱码,如何获取Url中参数问题

Js的Url中传递中文参数乱码,如何获取Url中参数问题一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码:1.传参页面Javascript代码:<script type=”text/javascript”>// <![CDATA[function send(){var url = "test01.html";var userName = $("#userName").html();window.open(encodeURI(url + "?userName=" + userName)); }// ]]></script>2. 接收参数页面:test02.html<script>var urlinfo = window.location.href;//獲取urlvar userName = urlinfo.split(“?”)[1].split(“=”)[1];//拆分url得到”=”後面的參數$(“#userName”).html(decodeURI(userName));</script>二:如何获取Url“?”后,“=”的参数值:A.首先用window.location.href获取到全部url值。

B.用split截取“?”后的全部C.split(“?”)后面的[1]内数字,默认从0开始计算三:Js中escape,unescape,encodeURI,encodeURIComponent区别:1.传递参数时候使用,encodeURIComponent否则url中很容易被”#”,”?”,”&”等敏感符号隔断。

2.url跳转时候使用,编码用encodeURI,解码用decodeURI。

3.escape() 只是为0-255以外ASCII字符做转换工作,转换成的 %u**** 这样的码,如果要用更多的字符如 UTF-8字符库就一定要用encodeURIComponent() 或encodeURI() 转换才可以成%nn%nn 这的码才可以,其它情况下escape,encodeURI,encodeURIComponent编码结果相同,所以为了全球的统一化进程,在用 encodeURIComponent() 或 encodeURI() 代替 escape() 使用吧!可以任意转载, 转载时请务必以超链接形式标明文章原始出处及此声明本文地址:。

中文乱码解决方法

中文乱码解决方法

中文乱码解决方法
方法一:更换字符编码
1.打开文档或网页,找到乱码的部分。

2.确认当前的字符编码方式,例如UTF-8、GB2312等。

3.在文档或网页中选择“查看”或者“文件”等菜单中的“编码”选项。

4.从弹出的编码列表中选择与当前文档编码方式不同的编码方式。

5.重启文档或网页,查看乱码问题是否得以解决。

方法二:修改操作系统语言设置
1.进入电脑的“控制面板”。

2.在“时钟和区域”或者“语言和区域”中找到“区域和语言选项”。

4.重启电脑,查看乱码问题是否得以解决。

方法三:使用专用软件转换编码
2.打开乱码的文档,选择“文件”菜单中的“编码”选项。

3.从弹出的编码列表中选择与当前文档编码方式不同的编码方式。

4.保存文档,并重新打开,查看乱码问题是否得以解决。

方法四:使用在线工具转换编码
2.将乱码的文本粘贴到网站的输入框中。

3.在网站提供的选项中选择正确的原始编码方式和目标编码方式。

4.点击转换按钮,网站将会自动转换编码,并将转换后的结果显示在
输出框中。

5.复制转换后的文本,粘贴到文档中,查看乱码问题是否得以解决。

3.如果乱码问题依然存在,尝试使用上述方法进行解决。

2.他们可能会提供更准确的解决方法或者转换好的文档。

需要注意的是,以上方法可能并不适用于所有情况,具体的解决方法
需根据具体情况进行调整。

在正常的中文环境下,中文乱码问题很少出现。

但在特殊环境下如跨国使用电脑时,中文乱码问题可能会出现。

正确设置
字符编码是避免中文乱码的重中之重。

jspurl中中文参数的乱码解决

jspurl中中文参数的乱码解决

jspurl中中文参数的乱码解决form有2中方法把数据提交给服务器,get和post,分别说下吧。

(一)get提交1.首先说下客户端(浏览器)的form表单用get方法是如何将数据编码后提交给服务器端的吧。

对于get方法来说,都是把数据串联在请求的url后面作为参数,如:http://localhost:8080/servlet?msg=abc(很常见的一个乱码问题就要出现了,如果url中出现中文或其它特殊字符的话,如:http://localhost:8080/servlet?msg=杭州,服务器端容易得到乱码),url拼接完成后,浏览器会对url进行URL encode,然后发送给服务器,URL encode的过程就是把部分url做为字符,按照某种编码方式(如:utf-8,gbk等)编码成二进制的字节码,然后每个字节用一个包含3个字符的字符串"%xy" 表示,其中xy 为该字节的两位十六进制表示形式。

我这里说的可能不清楚,具体介绍可以看下/doc/cb13442591.html,.URLEncoder类的介绍在这里。

了解了URL encode的过程,我们能看到2个很重要的问题,第一:需要URL encode的字符一般都是非ASCII的字符(笼统的讲),再通俗的讲就是除了英文字母以外的文字(如:中文,日文等)都要进行URL encode,所以对于我们来说,都是英文字母的url不会出现服务器得到乱码问题,出现乱码都是url里面带了中文或特殊字符造成的;第二:URL encode到底按照那种编码方式对字符编码?这里就是浏览器的事情了,而且不同的浏览器有不同的做法,中文版的浏览器一般会默认的使用GBK,通过设置浏览器也可以使用UTF-8,可能不同的用户就有不同的浏览器设置,也就造成不同的编码方式,所以很多网站的做法都是先把url里面的中文或特殊字符用javascript做URL encode,然后再拼接url提交数据,也就是替浏览器做了URL encode,好处就是网站可以统一get方法提交数据的编码方式。

通过url方式传递中文参数时出现的中文乱码问题的处理

通过url方式传递中文参数时出现的中文乱码问题的处理

通过url⽅式传递中⽂参数时出现的中⽂乱码问题的处理1.通过url将参数【会有中⽂的情况】传递到另外⼀个页⾯:window.location.href = "/XXXX/XXXX?searchcontent=" + Content + "";【数据会⾃动被编码】2.从另外页⾯通过参数形式获取到中⽂参数,然后传递到对应api进⾏处理查询。

//获取url中的参数function getUrlParam(name) {var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造⼀个含有⽬标参数的正则表达式对象var r = window.location.search.substr(1).match(reg); //匹配⽬标参数if (r != null) return unescape(r[2]); return null; //返回参数值}var searchContent =escape( getUrlParam("searchcontent"));【对参数进⾏⼀次解码】$.ajax({type: "Post",url: XXXX,dataType: 'json',data: { SearchContent: searchContent },success: function (result) {//成功后的处理⽅法},error: function (xhr, type) {console.log("Ajax error");}});3.后台获取数据进⾏解码,进⾏其他处理var EnCodeResult = HttpContext.Current.Request["SearchContent"].ToString();var SearchContent = HttpContext.Current.Server.UrlDecode(EnCodeResult);【对参数进⾏⼀次解码】//然后进⾏其他处理。

url传递中文参数乱码问题的终极解决方法。

url传递中文参数乱码问题的终极解决方法。

url传递中⽂参数乱码问题的终极解决⽅法。

估计很多⼈在做web开发的时候,都会碰到过url传递中⽂参数,有时候会出现乱码的问题,但有些项⽬或者环境,⼜不会有问题。

当遇到乱码的时候,上⽹找了很多解决⽅案,⽐如:1. 页⾯设置它的编码⽅式,改成utf-8 或者gb2312。

2. encodeURI(url),也有⼈说要2个encodeURI,如:window.location.href = encodeURI('b.html?cId='+id+"&cName="+encodeURIComponent(name));然后后台String str = .URLDecoder.decode(str, "UTF-8");这样进⾏转码等。

解决⽅法就不⼀⼀列举了,⼤家可⾃⾏百度搜索,我也搞不清楚究竟怎么能保证百分百解决问题。

项⽬中碰到的情况是,开发环境经过上述的2种⽅法,折腾过,确实能定位某个编码转换是正常的。

但部署到测试环境调试输出后发现,⽆论是gbk,utf8,iso等等编码测试,都⽆法正常还原中⽂字符串。

于是想到了另外⼀种⽅法,就是把中⽂转换为数字或者是英⽂字母以及标点符号等组成的字符串传递到后台,因此有想法是把字符串加密为base64的⽅式传过去后,再后台再进⾏解密。

上⽹找了下,没找到现成的有效⽅法,于是放弃了。

再后来,想着不需要加密了,直接把字符串转换成16进制传递到后台,再把它转回来吧,于是,这个终极的解决⽅案就出来了。

⾸先是jsp页⾯中增加脚本,把字符串转换成16进制字符串,字符之间⽤,号隔开,不隔开,⽆法区分出哪个是半⾓哪个是全⾓(如果不⽤,号隔开的,⿇烦请提供个好的解决⽅法,谢谢)function stringToHex(str){var val="";for(var i = 0; i < str.length; i++){if(val == "")val = str.charCodeAt(i).toString(16);elseval += "," + str.charCodeAt(i).toString(16);}return val;}页⾯上把字符串经过该函数转换后,传递到后台,如:var code_value=stringToHex(PrjName);var url= "/assets/fmProjectInfo.do?method=synCheckProjectName&prjName="+code_value+"&typeId=<bean:writename="fmProjectInfoForm" property="bo.ftId"/>"后台的转换代码为:public static String decode(String unicodeStr) {if (unicodeStr == null) {return null;}StringBuffer retBuf = new StringBuffer();int maxLoop = unicodeStr.length();for (int i = 0; i < maxLoop; i++) {if (unicodeStr.charAt(i) == '\\') {if ((i < maxLoop - 5)&& ((unicodeStr.charAt(i + 1) == 'u') || (unicodeStr.charAt(i + 1) == 'U')))try {retBuf.append((char) Integer.parseInt(unicodeStr.substring(i + 2, i + 6), 16));i += 5;} catch (NumberFormatException localNumberFormatException) {retBuf.append(unicodeStr.charAt(i));}elseretBuf.append(unicodeStr.charAt(i));} else {retBuf.append(unicodeStr.charAt(i));}}return retBuf.toString();}//把jsp页⾯传递进来的,⽤,号隔开的16进制字符串转换成类似:select \u7528\u6237\u540d from \u7528\u6237 的字符串,在调⽤decode⽅法把中⽂转换出来。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

使用tomcat 时,相信大家都回遇到中文乱码的问题,具体表现为通过表单取得的中文数据为乱码。

一、初级解决方法通过一番检索后,许多人采用了如下办法,首先对取得字符串按照iso8859-1 进行解码转换,然后再按照gb2312 进行编码,最后得到正确的内容。

示例代码如下:http://xxx.do?ptname='我是中国人'String strPtname = request.getParameter("ptname");strPtname = new String(strPtname.getBytes("ISO-8859-1"), "UTF-8"); String para = newString( request.getParameter("para").getBytes("iso8859-1"),"gb2312");具体的原因是因为美国人在写tomcat 时默认使用iso8859-1 进行编码造成的。

然而,在我们的servlet 和jsp 页面中有大量的参数需要进行传递,这样转换的话会带来大量的转换代码,非常不便。

二、入门级解决方法后来,大家开始写一个过滤器,在取得客户端传过来的参数之前,通过过滤器首先将取得的参数编码设定为gb2312 ,然后就可以直接使用getParameter 取得正确的参数了。

这个过滤器在tomcat 的示例代码jsp-examples 中有详细的使用示例, 其中过滤器在web.xml 中的设定如下,示例中使用的是日文的编码,我们只要修改为gb2312 即可<filter>1.<filter-name>Set Character Encoding</filter-name>2.<filter-class>filters.SetCharacterEncodingFilter</filter-class>3.<init-param>4.<param-name>encoding</param-name>5.<param-value>EUC_JP</param-value>6.</init-param>7.</filter>过滤器的代码如下:public class SetCharacterEncodingFilter implements Filter {1.// 编码的字符串2.protected String encoding = null;3.// 过滤器的配置4.protected FilterConfig filterConfig = null;5.// 是否忽略客户端的编码6.protected boolean ignore = true;7.// 销毁过滤器8.public void destroy() {9.this.encoding = null;10.this.filterConfig = null;11.}12.// 过滤方法13.public void doFilter(ServletRequest request, ServletResponseresponse,14.FilterChain chain)15.throws IOException, ServletException {16.// 如果使用过滤器,忽略客户端的编码,那么使用通过过滤器设定编码17.if (ignore || (request.getCharacterEncoding() == null)) {18.String encoding = selectEncoding(request);19.if (encoding != null)20.request.setCharacterEncoding(encoding);21.}22.// 传送给下一个过滤器23.chain.doFilter(request, response);24.}25.// 初始化过滤器26.public void init(FilterConfigfilterConfig) throws ServletException {27.this.filterConfig = filterConfig;28.this.encoding = filterConfig.getInitParameter("encoding");29.String value = filterConfig.getInitParameter("ignore");30.if (value == null)31.this.ignore = true;32.else if (value.equalsIgnoreCase("true"))33.this.ignore = true;34.else if (value.equalsIgnoreCase("yes"))35.this.ignore = true;36.else37.this.ignore = false;38.}39.// 返回过滤器设定的编码40.protected String selectEncoding(ServletRequest request) {41.return (this.encoding);42.}43.}然而在 tomcat5 中,即使使用过滤器,仍然可能取得乱码,原因何在呢?三、高级解决方法这是因为,在 tomcat4 和 tomcat5 中对参数的处理是不一样的,在 tomcat4 中get 与 post 的编码是一样的,所以只要在过滤器中通过request.setCharacterEncoding 设定一次就可以解决 get 与 post 的问题。

然而,在 tomcat5 中,get 与 post 的处理是分开进行的在 tomcat 5 中,为了解决编码问题,tomcat 的作者作了很多努力,具体表现为在 tomcat 的配置文件 server.xml 中对 Connector 元素增加了如下的配置参数,专门用来对编码进行直接的配置URIEncoding 用来设定通过 URI 传递的内容使用的编码,tomcat 将使用这里指定的编码对客户端传送的内容进行编码。

什么是 URI 呢?java doc 的说明中如下说明:URI 是统一资源标识符,而 URL 是统一资源定位符。

因此,笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。

这是因为 URI 还包括一个子类,即统一资源名称 (URN),它命名资源但不指定如何定位资源。

也就是说,我们通过 get 方法提交的参数实际上都是通过 uri 提交的,都由这个参数管理,如果没有设定这个参数,则 tomcat 将使用默认的 iso8859-1 对客户端的内容进行编码。

useBodyEncodingForURI 使用与 Body 一样的编码来处理 URI, 这个设定是为了与 tomcat4保持兼容,原来在 tomcat4 和 tomcat5 中队参数的处理是不一样的,在 tomcat4 中 get 与 post 的编码是一样的,所以只要在过滤器中通过request.setCharacterEncoding 设定一次就可以解决 get 与 post 的问题。

然而,在 tomcat5 中,get 与 post 的处理是分开进行的,对 get 的处理通过前面的 URIEncoding 进行处理,对 post 的内容依然通过request.setCharacterEncoding 处理,为了保持兼容,就有了这个设定。

将 useBodyEncodingForURI 设定为真后,就可以通过request.setCharacterEncoding 直接解决 get 和 post 中的乱码问题。

这样,我们可以通过在 server.xml 中设定 URIEncoding 来解决 get 方法中的参数问题,使用过滤器来解决 post 方法中的问题。

或者也可以通过在 server.xml 中设定 useBodyEncodingForURI 为 true ,配合过滤器来解决编码的问题。

在这里,我强烈建议在网站的创作过程中,全程使用 utf-8 编码来彻底解决乱码问题。

具体操作如下:1、页面内容使用 utf-8 格式保存,在页面中加入 <metehttp-equiv="contentType" content="textml;charst=utf-8">2、服务器端的 server.xml 中设定 useBodyEncodingForURI = true3、使用过滤器,过滤器设定编码为 utf-8四:如果有一些转码也转不过来的话,可是试试打开tomcat的server.xml,找到1.<Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" port="80" redirectPort="8443">并在最后加上useBodyEncodingForURI="true" URIEncoding="UTF-8",如下1.<Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" port="80" redirectPort="8443" useBodyEncodingFo rURI="true" URIEncoding="UTF-8">五:如果用jstl的话,可以自己写一个el的function,调用URLEncoder.encode 来编码。

IE缺省对URL后面的参数是不编码发送的,但是tomat缺省是按ISO8859-1来进行URL解码,因此才会出现上述错误。

相关文档
最新文档