`
willeager
  • 浏览: 95229 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

文件编码,AJAX编码学习笔记

阅读更多
1.文件编码:
默认情况下用编辑器打开文件时 会用 文件编码 打开(用文件编码显示文件内容)
但有些编辑器也可以指定打开文件时的编码(比如Eclipce)
使用哪种编码打开文件 决定了 在文件中手动添加内容时的编码
如果打开A.TXT文件的编码为gbk,而A.txt中有的内容确是UTF-8编码的,这种情况就会显示乱码
此时在A.txt中添加“中文”这个词语的话,则“中文”的编码为gbk,在gbk编码环境下就会显示为“中文”
 
注:如果不确定一个文本文件的编码,可以用如下方式,用文本文件打开以后另存为,此时的编码选项所显示的编码类型即文件编码
尤其注意的是:
    即使在PHP页面中使用了header("Content-type:text/html;charset=UTF-8;");,
    但是PHP文被GBK格式打开则此时输入的‘中文’是按GBK格式存储,
          即‘中文’的ASCII码为:‘0xD60xD0 0xCE0xC4’
    如果PHP文件被UTF-8格式打开则‘中文’的ASCII码为:‘0xE40xB80xAD 0xE60x960x87‘
 
2.ajax的编码问题
html页面:

由于XMLHttpRequest POST的内容是用UTF-8编码 ,客户端post的表单是x-www-form-urlencoded的,所以也要 post的内容进行编码encodeURIComponent()函数
escape() 只是为 ASCII字符 做转换工作,转换成的 %unnnn 这样的码,如果要用更多的字符如 UTF-8字符库
就一定要用 encodeURIComponent() 或 encodeURI() 转换才可以成 %nn%nn 还有
escape() 不编码这些字符:   @*/+
encodeURI() 不编码这些字符:   !@#$&*()=:/;?+'
encodeURIComponent() 不编码这些字符:   !*()'

还是推荐使用encodeURIComponent()函数来编码比较好。

以下假设html页面和PHP页面都是gbk编码


Post方式:
var url="ajax.php";  
    content='name='+encodeURIComponent('中文');
    xmlHttp.open("POST",url,true);
    xmlHttp.setRequestHeader("Content-Length", content.length);
    xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xmlHttp.onreadystatechange=stateChanged;   
    xmlHttp.send(content);
 
GET方式:
var url="ajax.php";  
    content='?name='+encodeURIComponent('中文');url += content;
    xmlHttp.onreadystatechange=stateChanged;
    xmlHttp.open("GET",url,true);
    xmlHttp.send(null);
 
 

PHP页面有以下两种处理方式都不会出现乱码(接收到的都是UTF-8编码的字符串)
一、如果没有设置header(),默认情况下会使用UTF-8的格式解析(有待考证)
<?php
$name = $_POST['name'];//$name = $_GET['name'];
$name = urldecode($name);//此行可有可无,php接收是自动完成 如果包含'+'的话,这行要注释掉
echo $name.mb_convert_encoding('你好!',"utf-8","gb2312");(gb2312 -> utf-8)

二、
 
<?php
header("Content-type:text/html;charset=gb2312;");
$name = $_POST['name'];//$name = $_GET['name'];
$name = urldecode($name);//此行可有可无,php接收是自动完成
$name = mb_convert_encoding($name,"gb2312","utf-8");(utf-8 -> gb2312)
echo $name.'你好!';
 
 
3.ajax过程解析
假设html的<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
使用content='name='+encodeURIComponent('中文');的时候
'中文'在GBK格式下为encodeURIComponent('中文')='%D6%D0%CE%C4',由于ajax使用utf-8格式进行传输 ,所以传输的时候自动转化为‘中文’在UTF-8下的格式:‘%E4%B8%AD%E6%96%87’
当在PHP页面上接受到的时候,PHP接受POST或者GET会自动进行 urldecode()操作
此时urldecode('%E4%B8%AD%E6%96%87')得到的字符串就是UTF-8格式的'中文'
 
PHP 页面(编码为UTF-8)中echo '中'(0xE40xB80xAD)返回给ajax的请求端,
A.
  如果有设置[header("Content-type:text/html;charset=UTF-8;");] 就是告诉
  ajax的接收器以'UTF-8' 的格式来解析收到的字符串(0x E40x B80x AD)-> '0x E40x B80x AD'(中)
  然后ajax接收器把解析后的字符串再按照编码转换格式转化为html页面编码格式(gb2312)的字符串给html使用:
  UTF-8 的'中'(0x E40x B80x AD) -> GB2312的'中'(0xD60xD0
  然后html页面使用的字符串就是 GB2312的'中'(0xD60xD0
B.
  如果有设置[header("Content-type:text/html;charset=GB2312;");] 就是告诉
  ajax的接收器以'GB2312' 的格式来解析收到的字符串(0x E40x B80x AD)-> '0x E40x B8'(涓) + ' 0x AD'(?)
  然后ajax接收器把解析后的字符串再按照编码转换格式转化为html页面编码格式(gb2312)的字符串给html使用:
  GB2312 的'涓'(0x E40x B8) -> GB2312的'涓'(0x E40x B8)
  然后html页面使用的字符串就是 GB2312的'涓'(0xD60xD0
C.
  如果没有设置header(),默认情况下会使用UTF-8的格式解析(有待考证)
 
注:GBK格式下的'中文'的ASCII码为: 214 208   207 196(0xD60xD0 0xCE0xC4)
     可以在GBK编码的PHP页面[header("Content-type:text/html;charset=gb2312;");]
     下如此测试:echo chr(0xD6).chr(0xD0).chr(0xCE).chr(0xC4);得到的是 ‘中文’
   UTF-8格式下的'中文'的ASCII码为:0xE40xB80xAD 0xE60x960x87
      验证方法同上
 
ASCII(美国信息交换标准编码)表
 
ASCII字符表:

                                      扩展ASCII字符表:


 
 
 
 
 
分享到:
评论

相关推荐

    Ajax和jQuery学习笔记

    ### Ajax和jQuery学习笔记 #### 一、Ajax基础与原理 **1.1 什么是Ajax?** Ajax(Asynchronous JavaScript and XML,异步JavaScript和XML)是一种用来创建快速动态网页的技术,通过在后台与服务器进行少量数据...

    Java相关课程系列笔记之十一Ajax学习

    在本篇Java相关课程系列笔记之十一中,我们聚焦于Ajax的学习,这是一项在Web开发中广泛使用的技术,用于创建动态、无刷新的用户界面。Ajax全称Asynchronous JavaScript and XML,即异步JavaScript和XML,它允许网页...

    夏玉保整理Ajax学习笔记.doc

    以下是夏玉保整理的Ajax学习笔记的关键点: 1. **处理IE缓存问题**: Internet Explorer浏览器在执行Ajax请求时,有时会缓存请求结果,导致即使服务器上的数据已更新,客户端仍显示旧的数据。为解决这个问题,通常...

    我的Ajax学习笔记

    Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载...以上内容涵盖了Ajax的基本概念、开发实践、浏览器兼容性、数据交互以及前端和后端的一些注意事项,这些都是学习和使用Ajax技术时需要了解的关键点。

    Ajax学习笔记

    Ajax,全称Asynchronous JavaScript and XML,是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。...通过学习和理解Ajax以及JSON的使用,开发者可以创建更加高效、交互性更强的Web应用程序。

    ajax学习笔记

    1. **编码问题**:Ajax请求时可能出现字符编码问题,POST请求需设置字符编码,GET请求则需对URL进行编码。 2. **浏览器缓存**:为防止Ajax请求被缓存,可以在URL末尾附加时间戳,或者设置HTTP头禁用缓存。 3. **JSON...

    struts2学习笔记黑马程序员

    ### Struts2学习笔记之文件上传与Ajax开发 #### Struts2文件上传 **文件上传简介** 文件上传是Web应用中常见的功能之一,Struts2框架内置了对文件上传的支持,使得开发者能够轻松地实现这一功能。为了确保文件...

    Web+HTML+JavaScript+Ajax学习笔记

    "Web+HTML+JavaScript+Ajax学习笔记"这个主题涵盖了许多Web开发的核心概念和技术。通过深入学习这些笔记,你将能够创建动态、交互式的Web应用,并理解前后端如何协同工作。同时,持续学习和掌握新的Web技术,如框架...

    java学习笔记

    本资源是 Java 开发者的学习笔记,涵盖了项目管理、权限管理、自动编号、Ajax 访问 servlet、数据库查询、字符串处理、数据加密、jQuery 弹框插件、乱码解决方案、版本控制、流程中加载 Java 事件、页面警告弹框、...

    学习笔记 MHT2

    【学习笔记 MHT2】是一份综合性的IT学习资料,主要涵盖了JavaScript编程、软件开发工具、Web服务器技术、编码解码方法以及设计模式等多个领域的知识。以下是对这些知识点的详细阐述: 1. **JavaScript经典技巧**:...

    powerbuider经典学习笔记

    【PowerBuilder经典学习笔记】 PowerBuilder(PB)是一款由Sybase公司推出的强大的数据库应用程序开发工具,以其高效、灵活和易用性在企业级应用开发领域备受推崇。它遵循客户端/服务器架构,支持面向对象编程,并...

    ajax经典实例大全

    比较全面的ajax学习,适合于新手,包含内容包含如下: 第一章 动态加载数据 1.1动态加载的FAQ 1.2根据邮政编码获取地区信息 1.3动态树形列表 1.4多级联动菜单 1.5条件设置向导 1.6页面关键词提示 第二章 改善...

    DWR 教程 中文API DWR.xml配置文件说明 DWR学习笔记

    首先,"DWR学习笔记"提供了对DWR基础概念、核心功能以及实际应用的概述。这些笔记可能包含了DWR的基本架构,如它如何通过AJAX技术实现实时的Web交互,以及如何创建和调用服务器端的Java方法。 "DWR中文API"是DWR库...

    Ajax版本的工作搜索引擎.rar

    Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的...通过学习这些资源,开发者可以了解到如何利用Ajax和Prototype构建一个实时的、高效的搜索引擎,并掌握处理XML数据和解决编码问题的方法。

    jquery中ajax学习笔记4

    ### jQuery中Ajax学习笔记4:缓存问题与中文问题详解 #### 缓存问题解析 在Web开发过程中,经常会遇到浏览器缓存导致的数据更新问题。本文档将详细讲解如何识别和解决缓存问题。 ##### 什么是缓存问题? 缓存...

    SpringMVC学习笔记+学习源码.zip

    总的来说,这份"SpringMVC学习笔记+学习源码.zip"资源涵盖了SpringMVC的基本概念、配置、控制器、数据绑定、异常处理、视图解析等多个方面的内容,对于初学者和有一定经验的开发者都是很好的学习资料。通过深入学习...

    JAVA WEB学习笔记

    【JAVA WEB学习笔记】 Java Web是Java技术在Web开发领域中的应用,涵盖了从服务器端编程到客户端交互的各种技术。这份学习笔记将带你深入理解Java Web的核心概念和实践技巧。 1. **Servlet与JSP** - Servlet是...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

    丛书名: 学习笔记 出版社:清华大学出版社 ISBN:9787302282082 上架时间:2012-5-9 出版日期:2012 年5月 开本:16开 页码:564 版次:1-1 所属分类:计算机 &gt; 软件与程序设计 &gt; JAVA(J#) &gt; Java 编辑推荐   ...

Global site tag (gtag.js) - Google Analytics