zoukankan      html  css  js  c++  java
  • ajax 解决中文乱码问题

     最近遇到了ajax 中文乱码的问题。下面总结一下

    1. HTTP协议的编码规定 

    在HTTP协议中,浏览器不能向服务器直接传递某些特殊字符,必须是这些字符进行URL编码后再进行传送。url编码遵循的规则: 将空格转换为(+) 对0-9,a-z,A-Z之间的字符保持不变。

    对于所有其他的字符,用这个字符的当前字符集编码在内存中的十六进制格式表示,并在每个十六进制字节前加上一个百分号%。例如,字符“+”用%2B表示,字符“=”用%3D表示,字符“&”用%26表示,

    字符“国”用%B9%FA表示注意,同一个中文字符在不同的字符集编码方式下,在内存中的编码值也是不同的,一个字符的URL编码是针对字符在内存中的码值而言的,采用不同编码的同一个字符的URL编码结果是不同的。

     

    2. encodeURI()与encodeURIComponent()函数

    javaScript中提供了两个函数来对字符进行URL编码:encodeURI()与encodeURIComponent(),两者的区别在于,encodeURI函数不会对以下的字符进行处理:“! @ # $ & * ( ) = : / ; ? + ' ”,

    而encodeURIComponent函数会对更多的字符进行处理比如 URI的组成部分 “/” 就会被encodeURIComponent进行处理。这两个方法对传递的值进行URL编码,

    过程是先找到字符所对应的UTF-8编码,比如“张三”两个字的UTF-8编码是”0xE5BCA0E4B889”(前面的是零x,表示是16进制编码).“张”是”0xE5BCA0”,”三”是”0xE4B889”,那么被转换后的结

    果就 是”%E5%BC%A0%E4%B8%89”,注意这个转换结果与网页的编码没有任何关系,因为这两个函数总是拿到字符所对应的UTF-8码,然后再进行URL编码的。也就是说不管网页是GBK的编码还是UTF-8的编码,

    转换的结果都一样。 所以如果我们发送给服务器的请求包含有中文或者其它比较特殊的字符如空格“+”等符号的时候,就就需要使用者两个函数对字符进行URL编码。

    如果编码是 html和服务器端都是utf-8 话 是不需要进行处理的,也就是说不会出现乱码问题。

    我的页面用的是gbk编码 我接收值得时候用
    encodeURIComponent 函数传值,在服务器端 我用的是php 我的解决办法是

      $name = urldecode("$_GET['name']");//首先进行解析
      iconv('utf-8', 'gbk', $name);//然后进行转码

  • 相关阅读:
    第19篇 2016年计划
    第18篇 我的中国梦
    Linux中文件实时同步
    Ansible Playbook
    Ansible简介及常用模块
    HTTP协议简单认识
    zabbix 分布式监控Proxy
    Zabbix中Agent自动注册
    Groovy基础语法
    Python文件操作
  • 原文地址:https://www.cnblogs.com/wlgaojin/p/3272634.html
Copyright © 2011-2022 走看看