Hopes

Start Here..

 

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 2013-01-17 10:26 ** 阅读(173) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

公告

你好!

常用链接

留言簿(2)

随笔档案

文章分类

文章档案

新闻档案

相册

收藏夹

C#学习

友情链接

搜索

最新评论

阅读排行榜

评论排行榜