AJAX+PHP

选择了远方,便只顾风雨兼程;目标是地平线,留给世界的是如风的背影!

 

Ajax+PHP的编码问题总结


我晕。。。。。。。。。。
弄了一天,总算把Ajax+PHP的编码问题弄清楚了。。。。。。。。。。
总结一下吧,省的忘了-------

1、Html被浏览器用什么字符打开,由下面两种情况:

   (1)<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
      这样就告诉了浏览器用gbk打开,如果你的html里面由utf-8的中文,则显示乱码

   (2)没有用<meta charset />指明编码,则你的html文件是用什么编码写的,就用什么编码打开!

2、浏览器遇到PHP文件,用什么字符显示,也有下面两种情况:

   (1)header('Content-Type:text/html;charset=utf-8');---则告诉你的浏览器用utf-8显示
      如果你的php文件是用GBK写的,且里面有中文要显示,则乱码。

   (2)如果没有header指定编码,则由php.ini中的default-charset指定的编码显示

3、Ajax与PHP文件的交互:

   (1)发送---不管js是由GBK还是UTF-8写的,里面的中文传到PHP后,都变成了正确UTF-8编码的中文[注意,不是乱码哦!]
 
   (2)接收---不管js,php,php.ini的编码如何,也不管是什么浏览器......
      只要PHP文件加上了header('Content-Type:text/html;charset=utf-8');
             而且echo的中文都是正确的UTF-8编码,则肯定OK!

   (3)实现(2)的方法及注意事项---------

 [1]假如PHP为GBK编码,想往JS传中文"哈哈",方法----$message = iconv("gbk","utf-8","哈哈"); echo $message;

        [2]假如PHP为GBK编码,想先存入数据库(utf-8),然后再取出传回JS,方法-$message = iconv("gbk","utf-8","哈哈")
            
           (注:有时会用到这个函数---mysql_query("SET NAMES 'UTF8'");作用---告诉数据库,"我传给你的将是一段X编码的数据,请按                X编码理解","你传给我的数据也必须翻译成X编码的,我只懂X编码")
      
        [3]// $message = strip_tags($message);    // $message = htmlentities($message, ENT_QUOTES);
           这两个讨厌的函数,会使$message变成乱码,具体为什么暂时还没查阅!!!

4、总结:

   (1)如果服务器是UTF-8编码,建议HTML,JS,PHP,MYSQL均用UTF-8写,这样什么都不用管,就OK!

   (2)如果服务器是GBK编码,建议HTML,JS,PHP用GBK编写,MYSQL还是用UTF-8,

          [1]需要PHP传中文到--->JS时,方法:header(..."utf-8"),且传的中文都用iconv函数处理!

          [2]需要PHP存中文到数据库时,方法:插入的中文用iconv函数处理之后再insert... 

5、补充:

(1)我假设,这里有一个PHP函数能正确实现JS里的unescape的功能!
现在有一个gb2312格式的HTML页面,其中的数据escape后经过ajax传到后台PHP页面中
php unescape处理后  数据变成了什么格式?       [后台为gb2312]

如果前台不做escape处理,后台也不做 unescape处理呢?   [后台为UTF-8]

注:The escape() function encodes a string, so it can be read on all computers.
escape()方法将字符串转换为特定的编码,使其能够被任意的计算机识别和读取。

实例---
In this example we use escape() to encode strings:
在下面的例子中我们用escape()来加密字符串:

<script type="text/javascript">document.write(escape("欢迎来到POP") + "<br />")document.write(escape("?!=()#%&"))</script>

The output of the code above will be:
输出结果为:

Visit%20W3Schools%21%3F%21%3D%28%29%23%25%26  

----------------------------------------------------------------------------------------------------------------------------

(2)mb系列函数:

php5汉字处理和字符串处理编码模式不同

例如,当我们使用strlen 这个函数 获得汉字的长度的时候 例如这个汉字串“我爱中国”

那么它返回的将是8个,而不是4个当我们希望得到4个的时候,我们就必须借用加前缀的mb_函数了

他的意思是多字节字符处理函数,此类函数的参数的最后一参数为,编码模式,有默认值,但我们要用

“Gb2312”,此编码模式,正确解析汉字;


实例:
mb_strlen($txt,"GB2312 ")

function indexOf($sorce,$chinese) {
   return ( @mb_strpos($sorce,$chinese,null,"GB2312") );
}

function charAt($sorce,$numpos) {
return ( mb_substr($sorce,$numpos,1,"Big5") );
}

function charAt($sorce,$numpos) {
return ( mb_substr($sorce,$numpos,1,"Big5") );
}

)

posted on 2008-03-06 01:17 刘伟 阅读(1678) 评论(0)  编辑 收藏 引用 网摘 所属分类: PHP


只有注册用户登录后才能发表评论。
网站导航:

导航

统计

公告

严正申明:严禁任何营利性商业网站在未经作者授权同意情况下进行转载等侵权行为。

留言簿(1)

随笔分类

随笔档案

新闻档案

相册

css

搜索

积分与排名

最新评论