php中url地址栏传参数中文乱码解决方法汇总
php各种应用乱码问题的解决方法
php各种应用乱码问题的解决方法php各种应用乱码问题的解决方法在使用php的时候可能会出现各种乱码问题,那么这个时候我们要分清楚情况一一解决问题了。
下面店铺为大家整理了php各种应用乱码问题的解决方法,希望能帮到大家!1) 使用标签设置页面编码这个标签的作用是声明客户端的浏览器用什么字符集编码显示该页面,xxx 可以为 GB2312、GBK、UTF-8(和 MySQL 不同,MySQL 是UTF8)等等。
因此,大部分页面可以采用这种方式来告诉浏览器显示这个页面的时候采用什么编码,这样才不会造成编码错误而产生乱码。
但是有的时候我们会发现有了这句还是不行,不管xxx 是哪一种,浏览器采用的始终都是一种编码,这个情况我后面会谈到。
请注意,是属于 HTML 信息的,仅仅是一个声明,仅表明服务器已经把 HTML 信息传到了浏览器。
2) header("content-type:text/html; charset=xxx");这个函数header() 的作用是把括号里面的信息发到http 标头。
如果括号里面的内容为文中所说那样,那作用和标签基本相同,大家对照第一个看发现字符都差不多的。
但是不同的是如果有这段函数,浏览器就会永远采用你所要求的xxx 编码,绝对不会不听话,因此这个函数是很有用的。
为什么会这样呢?那就得说说http 标头和HTML 信息的差别了:http 标头是服务器以 http 协议传送 HTML 信息到浏览器前所送出的字串。
而标签是属于 HTML 信息的,所以 header() 发送的内容先到达浏览器,通俗点就是header() 的优先级高于(不知道可不可以这样讲)。
假如一个php 页面既有header("content-type:text/html;charset=xxx"),又有,浏览器就只认前者http 标头而不认 meta 了。
当然这个函数只能在 php 页面内使用。
各种中文乱码解决办法
各种中⽂乱码解决办法在编程的时候会遇到各种中⽂乱码,这⾥进⾏统计以便以后查阅1、前端页⾯元素中⽂乱码<meta http-equiv="Content-Type" content="text/html; charset=GBK" />会出现下⾯乱码页⾯上的元素也就是html内的元素,是中⽂的会出现乱码,⽽从后台获取的中⽂不会出现乱码。
解决⽅法:页⾯上设置编码⽅式为UTF-8<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />2、URL传参、get⽅式传参出现中⽂乱码,如下出现这种情况,要先确定参数在前台页⾯上不是乱码的,可以alert()⼀下,看参数是否乱码解决办法1:对于以get⽅式传输的数据,request默认使⽤ISO8859-1这个字符编码来接收数据,客户端以UTF-8的编码传输数据到服务器端,⽽服务器端的request对象使⽤的是ISO8859-1这个字符编码来接收数据,服务器和客户端沟通的编码不⼀致因此才会产⽣中⽂乱码的。
解决办法:在接收到数据后,先获取request对象以ISO8859-1字符编码接收到的原始数据的字节数组,然后通过字节数组以指定的编码构建字符串,解决乱码问题。
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String id= request.getParameter("id");id=new String(name.getBytes("ISO8859-1"), "UTF-8") ;}解决⽅法2:修改tomcat服务器的编码⽅式,可以在server.xml⾥⾯设置<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>设置成红字部分,但是有时也是不可⽤的,因为即使这⾥设置的是UTF-8但是其他地⽅设置成其他编码⽅式会覆盖掉这个设置,仔细检查各个地⽅的编码。
中文参数乱码问题解决方案(精选5篇)
中文参数乱码问题解决方案(精选5篇)第一篇:中文参数乱码问题解决方案问题1:在使用tomcat服务器时,如在跳转路径中传递中文参数会出现乱码现向!如:以和两种方式提交的变量flag在LoginServlet中用request.getParameter(“flag”);时就会出现乱码问题。
解决:在tomcat/conf/servlet.Xml中加入一段代码:debug=“0” connectionTimeout=“20000”disableUploadTimeout=“true” URIEncoding=“true”/>问题2:如果uri中转递的是参数要发送到jsp页面,则必须在接受代码的jsp页面里面还要加入代码:问题3:在jsp页面里的代码修正://如不注明是post方式则默认是get方式问题4:在servlet中的代码修正在doPost方法里面最上面的位置加上如下代码:response.setCharacterEncoding(“gb2312”);request.setCharacterEncoding(“gb2312”);第二篇:struts2 action接收到的参数中文乱码的问题struts2 action接收到的参数中文乱码的问题(2011-06-16 10:55:44)转载标签:分类:技术收藏utf-8 乱码 gb2312 字符集编码方法杂谈中文乱码,首先要区分是页面乱码、action乱码,还是数据库乱码。
大致的原理是java使用unicode编码-->window使用gbk(gb2312的扩展集)--mysql默认使用utf-8(unicode的一种编码方法),这样转来转去就乱码了^_^。
解决方法如下:1.在struts2里面,最好将所有字符都设成utf-8。
1.1 在jsp页面设定字符编码。
这边有必有说明的是如果是jsp+java bean+servlet 的方案,中文乱码很好解决,统一设成gb2312就可以了。
url中文乱码解决大全
使用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 的问题。
url传值中文乱码解析
url传值中文乱码解析URL 传递中文参数时出现乱码,通常是因为字符编码的问题。
以下是几种常见的解决方式:1. URL 编码:当在 URL 中传递中文参数时,需要对参数进行 URL 编码。
URL 编码是一种将字符转换为可以在 URL 中传输的格式的方式。
对于中文,通常使用 UTF-8 编码,然后再进行 URL 编码。
```pythonimportparams = {"name": "张三"}params["name"] = (params["name"])url = " + (params)print(url) 输出:```2. 服务器端解码:当服务器接收到 URL 参数时,需要对其进行解码。
解码的方式与编码的方式相反。
```pythonimport假设 GET 请求的参数是 "name=%E5%BC%A0%E4%B8%80"query_string = "name=%E5%BC%A0%E4%B8%80"params = (query_string) 解码print(params) 输出:张三```3. 确保整个请求和响应都在同一个字符集下:确保整个请求(URL、请求头等)和响应(返回的内容)都在同一个字符集下。
如果字符集不一致,可能会导致乱码问题。
例如,如果服务器返回的是UTF-8 编码的内容,但客户端期望接收的是其他编码的内容,那么可能会出现乱码。
确保两端都明确知道并使用相同的字符集。
4. 检查浏览器或客户端的字符集设置:有时候浏览器或客户端可能默认使用了其他的字符集。
可以通过查看浏览器的设置或发送特定的响应头来指定正确的字符集。
例如,发送 `Content-Type: text/html; charset=UTF-8` 可以告诉浏览器内容是 UTF-8 编码的。
PHP中文乱码解决总结
关于PHP和MySQL出现乱码的解决办法最近几天一直在做贴吧的小项目,跟着十八老师的视频学着,中间也遇到不少问题,我查了不少资料最后都一一解决了。
下面详细分类说明各种乱码的处理方法。
简单地讲乱码的产生和各个环节里面设置的编码类型不匹配有关,这里的乱码主要都是指的中文显示的乱码。
(下面没有特指都是说中文显示乱码)。
我先根据发生乱码的位置来划分。
如果是需要快速查找解决方法的可以直接根据错误位置来查阅本文(根据编号快速查找)。
1.网页显示中文乱码。
2.PHPmyadmin中显示乱码。
3.控制台显示中文乱码。
如果是想详细了解各种情况的童鞋可以耐心阅读本文。
1.第一种在一般网页页面上显示中文出现乱码。
这个主要要改一下页面显示编码设置,如果是PHP文件,则在其中加上一句:header("Content-Type: text/html; charset=utf-8");并且要注意保存PHP文件的时候选择编码为utf8.如图所示在你需要显示的PHP后缀的页面中加上就可以,当然一般来说如果是比较多页面都要设置,一个个去添加很麻烦,就在初始化文件里面最后添加就可以加载到所有需要的文件了。
如果是静态页面(求别喷,很可能有静态页面的说),在页面<head></head>标签之间加上一句:<meta charset="utf-8">。
改完后页面的显示中文就能正常。
Utf8编码格式和gbk格式都是目前中文网站显示所用的编码,所以将charset改为utf即可。
2.第二种在MySQL图形化界面中文数据的显示。
在如PHPmyadmin里面也有可能出现中文乱码。
前面也说了要把PHP文件编码保存为utf8,所以相对应的MySQL的相关字符集的设置也要改成utf8;这里有几种方式可以供选择。
第一种治标不治本。
在需要进行数据库操作的PHP文件里,加上下面几句:mysql_query('set character_set_client = utf8');//设置client的字符集为utf8mysql_query('set character_set_connection = GBK');//s设置连接字符集为gbkmysql_query('set character_set_results = utf8');//设置最后结果的字符集为utf8当然作为程序员来说,如果一个添加留言的页面需要录入中文,一个修改留言的页面也需要中文的录入数据库,每个文件里都必须加,一个个写也是很烦躁的事,建议还是写到初始化文件(比如我写的init.php)里面,其他文件都会自行加载。
url地址传参中文乱码处理
1.将字符串转码:new String(“xxxxx”.getBytes("iso-8859-1"),"utf-8")
这种转码方式有很大的弊端,因为它是使用指定的字符集将此String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中,然后通过使用指定的字符编码将生成的byte 数组解码,构造一个新的String字符串。这种情况就有可能遇到的情况是,不能将一个汉字全部解码完。这样,前边的都能正常显示,但是最后一个字可能是乱码。所以不建议使用这种方式。
这种方式需要注意的是,在使用encode转码后,会出现特殊字符,这时候,就需要将特殊字符替换为相应的16进制。因为特殊字符在url路径中做为参数传递时,也是乱码。
第二种:
传参前:encodeURI(“xxxx”) 。
接收参数后:使用.URLDncoder.decode("xxxx",“utf-8")将16进制字符转为中文。
2.在传参种:
第一种:
传参前:使用.URLEncoder.encode("xxxx",“utf-8"),将中文转为16进制字符。
接收参数后:使用.URLDncoder.decode("xxxx",“utf-8")将16进制字符转为中文。
php中url地址栏传参数中文乱码解决方法汇总
php中url地址栏传参数中文乱码解决方法汇总在PHP中,URL地址栏传递参数时可能会出现中文乱码的问题。
这是因为URL是一种只支持ASCII字符的编码方式,不支持直接传递中文字符。
为了解决这个问题,我们可以使用以下方法:1. 使用 urlencode 和 urldecode 函数:- 在发送请求时,可以使用 `urlencode` 函数对参数进行编码,将中文字符转换为 URL 编码格式(%E4%BD%A0%E5%A5%BD)。
- 在接收请求时,可以使用 `urldecode` 函数对编码后的参数进行解码,将 URL 编码格式还原为中文字符。
2. 使用 rawurlencode 和 rawurldecode 函数:- `rawurlencode` 和 `rawurldecode` 函数与 `urlencode` 和`urldecode` 函数类似,但它们对字符进行更严格的编码和解码,确保特殊字符不会被转义。
3. 使用 base64_encode 和 base64_decode 函数:- 在发送请求时,可以使用 `base64_encode` 函数对参数进行编码,将参数转换为 Base64 编码格式。
- 在接收请求时,可以使用 `base64_decode` 函数对编码后的参数进行解码,将 Base64 编码格式还原为原始参数。
4. 使用 iconv 函数进行字符编码转换:- 在发送请求时,可以使用 `iconv` 函数将参数从当前字符编码(如 UTF-8)转换为其他字符编码(如 GBK)。
- 在接收请求时,可以使用 `iconv` 函数将参数从其他字符编码转换为当前字符编码。
5.在HTML中使用表单提交方式:- 如果参数是通过表单提交的,可以在 HTML 表单上使用 `accept-charset` 属性来指定表单中参数的字符编码(如 UTF-8),确保参数在传递过程中不会出现乱码。
6.使用$_GET和$_POST变量:-如果参数是通过HTTPGET或POST方法传递的,可以直接使用PHP中的`$_GET`或`$_POST`变量来获取参数值,PHP会自动处理编码问题。
解决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“。
php乱码解决方案
php乱码解决方案《PHP乱码解决方案》在使用PHP进行开发时,经常会遇到乱码的问题。
乱码可能会导致网页显示不正常,影响用户体验。
那么,如何解决PHP乱码问题呢?下面介绍一些常见的解决方案。
1. 确保编码一致在PHP文件开头添加如下代码,指定文件编码格式:```phpheader("Content-type: text/html; charset=utf-8");```这样可以确保输出的内容使用UTF-8编码,可以有效避免乱码问题。
2. 数据库连接设置在连接数据库时,应该设置连接字符集为UTF-8:```phpmysqli_set_charset($con, "utf8");```这样可以确保从数据库获取的数据也是UTF-8编码的,避免乱码问题。
3. 处理中文字符在PHP代码中处理中文字符时,应该使用相关的函数进行处理,比如使用`mb_convert_encoding`函数进行编码转换。
4. 使用HTML meta标签在HTML页面的head标签中添加如下meta标签:```html<meta charset="UTF-8">```这样可以告诉浏览器页面的编码格式,确保页面正常显示。
5. 检查服务器设置在一些情况下,乱码可能是由于服务器的配置问题导致的。
可以检查服务器的默认编码设置,确保与项目所需的编码一致。
总结:PHP乱码问题可能会因多种原因导致,但通过以上一些常见的解决方案,可以有效避免乱码问题的发生。
在开发过程中,应该注意统一编码格式,并且使用相关的函数和方法进行编码转换,确保输出内容的准确性和美观性。
url传中文解决方案
url传中文解决方案
在URL中使用中文字符是一种常见的需求,但是由于URL规范的限制,直接在URL中使用中文字符可能会导致一些问题,例如乱码、识别不准确等。
为了解决这些问题,可以采用以下几种方案:
1.URL编码
URL编码是将URL中的非ASCII字符转换为%加上其对应的十六进制
值的形式。
对于中文字符来说,可以使用UTF-8编码将其转换为URL安全
的形式。
下面是一个例子:
在编码后的URL中,中文字符“你好”被转换为
“%E4%BD%A0%E5%A5%BD”。
2.链接短网址
短网址服务可以将较长的URL转换为短的URL形式,同时可以解决URL中包含中文字符的问题。
短网址服务一般会将URL编码后进行转换,
这样就能够有效地处理中文字符。
用户在使用这样的短网址时,会被重定
向到原始URL。
3.二级域名转换
在这个转换后的URL中,中文字符被转换为了符合URL规范的ASCII
字符。
4.嵌入唯一标识符
这个唯一标识符可以是一个数字、字符串或者其他形式,只要能够唯
一标识出相应的资源即可。
总结起来,URL中包含中文字符的解决方案可以通过URL编码、链接短网址、二级域名转换和嵌入唯一标识符等方式来实现。
根据实际需求和技术限制,选择合适的解决方案来解决中文字符在URL中带来的问题。
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方法提交数据的编码方式。
phpurl地址栏传中文乱码解决方法集合
phpurl地址栏传中⽂乱码解决⽅法集合url编码语法: string urlencode(string str);返回值: 字符串函数种类: 编码处理例如:复制代码代码如下:<?php$ChineseName="我的名字,是中⽂的哦";$EncodeStr=urlencode($ChineseName);echo "<a href=/cgi/personal.cgi?name=$EncodeStr>我的名字</a>";>url解码还原 URL 编码字符串。
语法: string urldecode(string str);返回值: 字符串函数种类: 编码处理例如:对前⾯传过来的中⽂进⾏处理显⽰复制代码代码如下:<?php$DecodeStr=urldecode($_GET['name']);//你可能不⽤解码都可以,因为浏览器会⾃动帮你解码echo $DecodeStr;>使⽤$gonghui = iconv("gb2312","UTF-8",$gonghui);另⼀⽅法代码/*** 多字节字符串编码转换函数** @param string str 需要进⾏编码转换的字符串* @param string to_encoding 指定转换为某种编码,如:gb2312、gbk、utf-8等* @param mixed from_encoding 混合指定原来字串的编码,如:同时指定 JIS, eucjp-win, sjis-win 混合编码* @return stringstring mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] )**/mb_convert_encoding 函数为php内部多字节字符串编码转换函数,可以在有需要的使⽤场合,⼏乎⽀持所有编码。
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⽅法把中⽂转换出来。
通过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);【对参数进⾏⼀次解码】//然后进⾏其他处理。
PHP基于curlpost实现发送url及相关中文乱码问题解决方法
PHP基于curlpost实现发送url及相关中⽂乱码问题解决⽅法本⽂实例讲述了PHP基于curl post实现发送url及相关中⽂乱码问题解决⽅法。
分享给⼤家供⼤家参考,具体如下:这个问题困扰我⼏天了,发送的指定⽹址的url参数,中⽂总是乱码,指定⽹址是utf8编码的,我发送的也是utf8编码的。
但是还是乱码,开始⽤的file_get_contents,后来换成curl并在php.ini中开启了php_curl,还是不⾏,⼜加了header终于解决。
代码如下:$url = 'http://'; //调⽤接⼝的平台服务地址$post_string = array('a'=>'b');$ch = curl_init();$this_header = array("content-type: application/x-www-form-urlencoded;charset=UTF-8");curl_setopt($ch,CURLOPT_HTTPHEADER,$this_header);curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);curl_setopt($ch, CURLOPT_TIMEOUT, 30);$result = curl_exec($ch);if($result)echo "<script>\nalert(\"同步成功! \");\n</script>";curl_close($ch);总结:解决此类编码问题,⾸先,要确认两个地⽅的编码是什么,其次,如果编码相同那么可以直接发送,使⽤curl需要加header设置charset,最后,多查多试,⼀种⽅法不⾏再换另⼀个试试,如果都不⾏,那么就从头再考虑⼀遍问题,总能解决的。
PHP中文乱码解决方案
PHP中⽂乱码解决⽅案汉字乱码真是⼀个悲催的事情,JAVA讨厌汉字,PHP也不喜欢汉字;Java乱码最终使⽤了spring给出的过滤器来过滤,处处过滤,其实影响了速度,不过没有办法,汉字就是W国⾸先不考虑的事情;想不到PHP也是乱码处处在,当你使⽤亲兄弟MySQL的时候,汉字显得那么亲切,从未考虑过他会变成天书;不过为了和其他其他交互,把PHP的⼿伸到SQL SERVER的时候,乱码来了,原因是第三⽅系统⽤的GBK编码;哎,转换吧;1,PHP⾃带的转换函数ICONV,⼀个⾼⼤上的函数;复制代码代码如下:string iconv ( string $in_charset , string $out_charset , string $str )使⽤DEMO:复制代码代码如下:<?php$text = "This is the Euro symbol '€'.";echo 'Original : ', $text, PHP_EOL;echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL;echo 'IGNORE : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL;echo 'Plain : ', iconv("UTF-8", "ISO-8859-1", $text), PHP_EOL;>⼤家都推荐的函数,不过使⽤之后⽆法转换,没有错误,字符也没有转换,NO!2,另辟蹊径,还有⼀个⼤家质疑效率不⾼的函数,不过⽆论如何,先实现再考虑其他三复制代码代码如下://检查该函数是否可⽤echo function_exists('mb_convert_encoding');//检测当前编码echo mb_detect_encoding($val, "GBK, GB2312, UTF-8");//转换编码,把CP936(就是GBK)转换成UTF-8$v=mb_convert_encoding ($val, "UTF-8", "CP936");结果成功了;好吧,先⽤着吧,为了转换数据库查询的结果集,制作⼀个转换函数:1,函数“乱码克星”:复制代码代码如下:// $fContents 字符串// $from 字符串的编码// $to 要转换的编码function auto_charset($fContents,$from='gbk',$to='utf-8'){$from = strtoupper($from)=='UTF8'? 'utf-8':$from;$to = strtoupper($to)=='UTF8'? 'utf-8':$to;if( strtoupper($from) === strtoupper($to) || empty($fContents) || (is_scalar($fContents) && !is_string($fContents)) ){//如果编码相同或者⾮字符串标量则不转换return $fContents;}if(is_string($fContents) ) {if(function_exists('mb_convert_encoding')){return mb_convert_encoding ($fContents, $to, $from);}else{return $fContents;}}elseif(is_array($fContents)){foreach ( $fContents as $key => $val ) {$_key = auto_charset($key,$from,$to);$fContents[$_key] = auto_charset($val,$from,$to);if($key != $_key )unset($fContents[$key]);}return $fContents;}else{return $fContents;}}2,使⽤:复制代码代码如下://打印输出查询结果(假设你的结果)$arr=array();while($list=mssql_fetch_row($row)){$arr[]=$list;}$s=auto_charset($arr,'gbk','utf-8');//打印试试,在浏览器设置编码为UFT-8,看没有乱码print_r($s);die();以上所述就是本⽂关于php中⽂乱码的介绍了,希望⼤家能够喜欢。
URL传递中文参数乱码问题
URL传递中文参数乱码问题Jsp页面使用URL编码传递中文参数的情况下,在参数的解析过程中会出现乱码。
由于java在设计的时候考虑到了国际化的问题,在java源程序编译成字节码的时候默认使用的是UTF-8编码。
而在web 运用上,由于不同的浏览器向服务器发送的信息采用的编码方式不同,在由像tomcat之类的服务器解码的时候会由于编码方式的不同而产生乱码,这是一个会困扰jsp初学者很久的问题。
以前在使用struts的时候不需要处理这些问题,前些天在做一个简单的jsp页面的时候碰到这个问题。
经过半天的摸索,基本解决了该问题。
例子中a.jsp页面通过URL编码的方式传递中文参数,在b.jsp中对该参数进行解析。
a.jsp源代码<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>无标题文档</title></head><body><%String str_test = "华工";%><form method=post action="b.jsp?test=<%=.URLEncoder.encode(str_test) %>"><input type="submit" value="Submit" name="提交"></form></body></html>b.jsp源代码<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>无标题文档</title></head><body><%String str = new String(request.getParameter("test").getBytes("ISO8859_1"));%><BR><%=str %></body></html>说明:在使用了.URLEncoder.encode 编码后,页面获取参数request.getParameter后需要使用ISO8859_1编码转换。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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);
在php文件的头部加上下面三行代码:
复制代码 代码如下:
mb_internal_encoding(“gb2312″); // 这里的gb2312是你网站原来的编码
mb_http_output(“HTML-ENTITIES”);
ob_start(‘mb_output_handler’);
使用mb_convert_encoding 函数需启用PHP 的mbstring (multi-byte string)扩展。
lc_address=”zh_cn.utf-8″
lc_telephone=”zh_cn.utf-8″
lc_measurement=”zh_cn.utf-8″
lc_identification=”zh_cn.utf-8″
lc_all=
[root@dhcp ~]#
echo ‘<a href=”?region=$test1″>aaa </a>’;
?>
另一页面使用base64_decode解开
base64_decode($region);
//方法三让服务器支持中文
[root@dhcp ~]# locale
lang=zh_cn.utf-8
如果没有没有开启php的mbstring扩展,则需要做如下设置,让php支持该扩展。
1、windows 服务器环境
编辑 php.ini 文件,将; extension=php_mbstring.dll 前面的 ; 去掉,重启网页服务器。
2、Linux服务器环境
在编译配置时加入 –enable-mbstring=cn 编译参数,再进行PHP的编译安装。
其它网友的第三个参考方法:
//方法一 urldecode
$url = ‘aaa.php?region=’.urldecode(“四川省”);
<a href=”<?php echo $url;?>”>aaa </a>
//方法二base64_encode
<?
$test=”四川省”;
$test1=base64_encode($test);
* @pa时指定 JIS, eucjp-win, sjis-win 混合编码
* @return string
string mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] )/
改成
//工会登入参数
$gonghui = $_GET['gh'];
$gonghui = mb_convert_encoding($gonghui, “UTF-8″, “gb2312″);
就显示正常了
对整个页面进行转换
该方法适用所有编码环境。这样把前128个字符以外(显示字符)的字符集都用 NCR(Numeric character reference,如“汉字”将转换成“汉字”这种形式)来表示,这样的编码在任意编码环境下页面都能正 常显示。
返回值: 字符串
函数种类: 编码处理
例如:
对前面传过来的中文进行处理显示
复制代码 代码如下:
<?php
$DecodeStr=urldecode($_GET['name']);//你可能不用解码都可以,因为浏览器会自动帮你解码
echo $DecodeStr;
?>
关于php用get方法从url上获得的中文乱码问题
php中url地址栏传参数中文乱码解决方法汇总
php地址栏传中文$_GET下来后乱码,urlencode和urldecode用法详解
url编码
语法: string urlencode(string str);
返回值: 字符串
函数种类: 编码处理
例如:
复制代码 代码如下:
<?php