PHP Ajax传值中文字符乱码如何解决

  在PHP网站开发中,为了增加用户体验度,Ajax是一种经常使用的技术,但是对于初学者来说,时常会碰到Ajax传值中文字符串时变成乱码的问题,有什么办法可以解决PHP AJAX传值中文字符乱码的问题呢?

  我们知道Ajax技术由Javascript演变而来,而Javascript使用UTF-8编码,当前后台页面采用GBK或者其他编码,同时没有进行编码转换时,就会出现中文字符乱码问题。

PHP Ajax传值中文字符乱码解决方法

  方法一、前后台页面以及数据库统一采用UTF8编码,这是最简单的方法。

  方法二、当网站已采用了诸如GBK/GB2312编码时,分两种情况:

  1、Ajax发送中文字符、PHP(后台程序)进行接收发生乱码时,使用GBK与UTF8的转换函数对接受的字符串进行编码转换,再存入相关数据库,这里假设数据库采用的编码是GBK或者GB2312,如果配置的PHP运行环境支持ICONV函数,你也可使用ICONV函数进行编码转换,然后在存入数据库时

1 mysql_query("set names gb2312");

即可解决Ajax传值中文乱码问题。

  2、PHP发送中文字符、Ajax(前台页面)进行接收发生乱码时,同样可以使用ICONV函数对从数据库中取出的字符串进行编码转换,再传值至Ajax前台,即responseText。或者在PHP(后台程序)输出字符流之前加上

1 header('Content-type: text/html;charset=gb2312');

即可。特别指出:在使用Ajax做多级联动(比如省份城市联动)时,采用XML交互形式,在输出XML之前也必须加上header。

  同时贴出GB2312与UTF8的转换函数,方便大家在遇到Ajax中文乱码问题时多一种解决方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
function gb2utf8($gb,$filename)

{

    if(!trim($gb))

    return
$gb;

    //$filename="gb2312.txt";
    $tmp=file($filename);

    $codetable=array();

    while(list($key,$value)=each($tmp))

    $codetable[hexdec(substr($value,0,6))]=substr($value,7,6);

    $utf8="";

    while($gb)

    {

        if
(ord(substr($gb,0,1))>127)

        {

            $thisgb=substr($gb,0,2);

            $gb=substr($gb,2,strlen($gb));

            $utf8.=u2utf8(hexdec($codetable[hexdec(bin2hex($thisgb))-0x8080]));

        }

        else

        {

            $gb=substr($gb,1,strlen($gb));

            $utf8.=u2utf8(substr($gb,0,1));

        }

    }

    $ret="";

    for($i=0;$i<strlen($utf8);$i+=3)

    $ret.=chr(substr($utf8,$i,3));

    return
$ret;

}

function u2utf8($c)

{

    for($i=0;$i<count($c);$i++)

    $str="";

    if
($c
<
0x80)
{

        $str.=$c;

    }

    else
if
($c
<
0x800)
{

        $str.=(0xC0

$c>>6);

        $str.=(0x80

$c
&
0x3F);

    }

    else
if
($c
<
0x10000)
{

        $str.=(0xE0

$c>>12);

        $str.=(0x80

$c>>6
&
0x3F);

        $str.=(0x80

$c
&
0x3F);

    }

    else
if
($c
<
0x200000)
{

        $str.=(0xF0

$c>>18);

        $str.=(0x80

$c>>12
&
0x3F);

        $str.=(0x80

$c>>6
&
0x3F);

        $str.=(0x80

$c
&
0x3F);

    }

    return
$str;

}

:此函数需要使用GB2312中文编码表,请点击这里下载,由于是采用gb2312,对于一些比较生僻的词在转换时可能会出现乱码。

  :PHP网站开发教程-leapsoul.cn版权所有,转载时请以链接形式注明原始出处及本声明,谢谢。

时间: 2024-09-19 08:58:40

PHP Ajax传值中文字符乱码如何解决的相关文章

解决AJAX中POST或GET传递中文字符乱码

ajax中文乱码有很多原因那么如何解决这个乱码问题呢? 很简单,使用 JS的内置函数 encodeURIComponent 对中文字符串进行转义一下就好了.关于 encodeURIComponent 函数的用法, scape() 方法: 采用ISO Latin字符集对指定的字符串进行编码.所有的空格符.标点符号.特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字).比如,空格符对应的编码是%20. 不会被此方法编码的字符: @ *

escape函数解决js中ajax传递中文出现乱码问题_javascript技巧

本文实例讲述了escape函数解决js中ajax传递中文出现乱码问题,分享给大家供大家参考.具体方法如下: 一.问题描述: 本来网页特效中的escape()是将中文按iso-8859-1字符集进行url编码的,那样通过 request.getparameter()是能直接获取到请求参数的,但后来的javascript将escape()换成了unicode字符集编 码,如此一来,在jsp教程和servlet中就没法直接拿到请求参数了,具体原因我也不知道. 二.解决办法: 1.首先对中文字符进行两次

jquery ajax传递中文参数乱码问题及解决方法说明

 本篇文章主要是对jquery ajax传递中文参数乱码问题及解决方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 jQuery传递中文参数乱码,原因是默认的传递方式没有采用UTF-8,所有我们可以在传递参数的时候对参数进行编码,然后再操作,代码如下,红色的代码为传递的参数,已标注    代码如下: smsubmitclick = function(){    $(document).ready(function(){        var name = $("#txt_name&q

JS传值出现中文参数乱码的解决方法_javascript技巧

本文实例讲述了JS传值出现中文参数乱码的解决方法.分享给大家供大家参考,具体如下: function PopupFK(cNum,type){ var url = "contract!Paying.action"; url = url + "?contract.contractNum="+cNum+"&payingType="+type; // if(isEmpty($(_this).attr("payId"))){ /

js传值后台中文出现乱码的解决方法_javascript技巧

本文实例讲述了js传值后台中文出现乱码的解决方法.分享给大家供大家参考,具体如下: 在"test.jsp"页面中,需要通过js将值传递到后台,后台根据传递的值进行数据查询时,通过test.jsp的js进行编码(标注部分的代码),后台Java解码(注释标注部分为解码),可以解决 test.jsp: <script type="text/JavaScript" charset="UTF-8"> function test() { //下面

Java中URL传中文时乱码的解决方法_java

前言 Java中URL传中文时乱码的问题相信不少朋友都遇到过,最近就遇到一个问题,就是在Action当中把一条中文信息绑定在URL的后面,ActionForward到别一个页面时,用reqeust.getParameter取出是出现乱码的问题. 解决办法 1.对要进行URL传递的中文字符进行编码: String message = java.net.URLEncoder.encode("中文字符","utf-8"); 2.在取URL传递中文的页面对字符进行解码: S

Win7系统CMD命令提示符输入中文变乱码的解决方法

  解决方法: 1.首先打开CMD命令提示符; 2.打开命令提示符后,输入chcp 936,点击回车; 3.执行后如果显示的是"活动代码页:936"即可解决问题,如果显示的是"□□□□□:936",则往下看; 4.右击命令提示符的标题栏,选择打开"默认值",并选择"默认代码页"为"936",点击确定即可. 以上就是对win7下CMD中文变成乱码的解决方法全部内容的介绍,有同样问题的朋友可以按照上述的方法进行

PHP附件下载中文名称乱码的解决方法_php技巧

本文实例讲述了PHP附件下载中文名称乱码的解决方法.分享给大家供大家参考,具体如下: PHP中,如果要下载的文件名称为中文,则会出现文件标题乱码. 此时就需要对标题进行编码,也就是说先进性urlencode,然后再放入header,然后问题就解决了. $filename = urlencode("下载文档"); header ( "Content-disposition: attachment; filename=$filename.xls" ); 网上说,在RFC

multipart ile-MultipartFile上传文件时,中文文件名乱码怎么解决?

问题描述 MultipartFile上传文件时,中文文件名乱码怎么解决? package com.upload; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Co