当前位置:首页 » 编程语言 » php获取编码

php获取编码

发布时间: 2025-07-19 18:27:29

‘壹’ php中文编码~~

一、页面编码

1. 使用 <META http-equiv="content-type" content="text/html; charset=xxx"> 标签设置页面编码

这个标签的作用是声明客户端的浏览器用什么字符集编码显示该页面,xxx可以为GB2312,GBK,UTF-8(和Mysql不同,MySQL是 UTF8)等等。因此,大部分页面可以采用这种方式来告诉浏览器显示这个页面的时候采用什么编码,这样才不会造成编码错误而产生乱码。但是有的时候我们会发现有了这句还是不行,不管xxx是哪一种,浏览器采用的始终都是一种编码,这个情况我后面会谈到。

请注意,<meta>是属于html信息的,仅仅是一个声明,它起作用表明服务器已经把HTML信息传到了浏览器。

2. header("content-type:text/html; charset=xxx");

这个函数header()的作用是把括号里面的信息发到http标头。

如果括号里面的内容为文中所说那样,那作用和<META>标签基本相同,大家对照第一个看发现字符都差不多的。但是不同的是如果有这段函数,浏览器就会永远采用你所要求的xxx编码,绝对不会不听话,因此这个函数是很有用的。为什么会这样呢?那就得说说HTTPS标头和HTML信息的差别了:

https标头是服务器以HTTP协议传送HTML信息到浏览器前所送出的字串。

因为meta标签是属于html信息的,所以header()发送的内容先到达浏览器,通俗点就是header()的优先级高于meta(不知道可不可以这样讲)。加入一个php页面既有header("content-type:text/html; charset=xxx"),又有<META http-equiv="content-type" content="text/html; charset=xxx">,浏览器就只认前者http标头而不认meta了。当然这个函数只能在php页面内使用。

同样也留有一个问题,为什么前者就绝对起作用,而后者有时候就不行呢?这就是接下来要谈的Apache的原因了。

3. AddDefaultCharset

Apache 根目录的 conf 文件夹里,有整个Apache的配置文档httpd.conf。

用文本编辑器打开httpd.conf,第708行(不同版本可能不同)有AddDefaultCharset xxx,xxx为编码名称。这行代码的意思:设置整个服务器内的网页文件https标头里的字符集为你默认的xxx字符集。有这行,就相当于给每个文件都加了一行header("content-type:text/html; charset=xxx")。这下就明白为什么明明meta设置了是utf-8,可浏览器始终采用gb2312的原因。

如果网页里有header("content-type:text/html; charset=xxx"),就把默认的字符集改为你设置的字符集,所以这个函数永远有用。如果把AddDefaultCharset xxx前面加个“#”,注释掉这句,而且页面里不含header("content-type…"),那这个时候就轮到meta标签起作用了。

4. default_charset

在 php.ini 文件中可以定义 php 的默认语言: default_charset = "xxx",xxx为编码名称。这行代码的意思是设置所有 php 的输出页面编码为 xxx。

总结:

以上 4 种编码设置方法的优先级如下:

header("content-type:text/html; charset=xxx")
default_charset xxx
AddDefaultCharset xxx
<META http-equiv="content-type" content="text/html; charset=xxx">
如果你是web程序员,给你的每个页面都加个header("content-type:text/html; charset=xxx"),保证它在任何服务器都能正确显示,可移植性强。

至于那句AddDefaultCharset xxx,要不要注释就仁者见仁了。反正我是注释掉了,不过我写页子也要写header(),便于放到服务器上能正常显示。

二、数据库编码

PHP 程序在查询数据库之前,首先执行 mysql_query(“SET NAMES xxxx”);其中 xxxx 是你网页的编码(charset=xxxx),如果网页中 charset=utf8,则 xxxx=utf8,如果网页中 charset=gb2312,则xxxx=gb2312,几乎所有WEB程序,都有一段连接数据库的公共代码,放在一个文件里,在这文件里,加入mysql_query(“set names”)就可以了。

SET NAMES 显示客户端发送的 SQL 语句中使用什么字符集。因此,SET NAMES 'utf-8'语句告诉服务器“将来从这个客户端传来的信息采用字符集utf-8”。它还为服务器发送回客户端的结果指定了字符集。(例如,如果你使用一个SELECT语句,它表示列值使用了什么字符集。)

三、中文文件名

默认情况下,文件名为中文时不能访问。要使中文文件名能正常访问,需进行如下设置:

在ie中选择 工具 -> internet选项 -> 高级 -> 取消“总是以UTF-8发送URL”。

‘贰’ PHP实现URL编码、Base64编码、MD5编码的方法

今天开始福哥要给大家讲解关于字符编码的知识,所谓字符编码就是将一个字符串或者是一个二进制字节数组里面的每一个字符根据一定的规则替换成一个或者多个其他字符的过程。

字符编码的意义有很多种,有的是为了将一些不可见的字符以可见字符替代保证可见度;有的是为了以少数字符去描述更多的其他字符便于传递数据;还有的是为了将不定长的字符串转成定长的规则字符串来实现字符串加密的目的。

编码,英文是Encode,意思是从一个原始的字符串根据编码规则转换成一段新的字符串的过程。编码后的字符串里面的字符会更加统一,或者更加单一,甚至会变成固定长度。

解码,英文是Decode,和编码正好相反,意思是从一段已经编码后的字符串还原成编码前的原始字符串的过程。并不是所有的经过编码规则进行编码后的字符串都可以解码会原始字符串的,能够解码回来的编码方式称之为可逆编码方式,不能够解码回来的编码方式称之为不可逆编码方式。

URL编码规则是这样的,首先按顺序取出字符串当中的每一个字符,将字符转换为ASCII码的十六进制数值,然后在十六进制数值前面加上一个百分号“%”,最后把每一个字符编码后的组合拼接起来就完成了。而解码规则就是反过来,将编码后的字符串以百分号“%”拆分开,然后将每个十六进制数值转换回ASCII码,最后在拼接到一起就好了。

需要注意的GBK的字符串和UTF-8的字符串在进行URL编码后得到的字符串是不一样的,例如:GBK的“福哥”编码后是“%B8%A3%B8%E7”,而UTF-8的“福哥”编码后是“%E7%A6%8F%E5%93%A5”。

PHP提供了一个专门用来完成URL编码的函数urlencode,使用也非常简单,传入原始字符串,返回编码后的字符串。

PHP提供了一个专门用来完成URL解码的函数urldecode,使用也很简单,传入编码后的字符串,返回原始字符串。

Base64编码就是基于64个可见字符将任何十进制字符或者二进制字节转换成这些字符的过程,64个字符包括大小写字母和十个数字以及“+”和“/”,通常情况下“=”用来放在最后补位使用。

Base64编码方式同样受GBK或者UTF-8的影响,GBK的“福哥”的Base64码是“uKO45w==”,而UTF-8的“福哥”的Base64码是“56aP5ZOl”。

PHP提供了一个专门用来完成Base64编码的函数base64_encode,使用也非常简单,传入原始字符串,返回编码后的字符串。

PHP提供了一个专门用来完成Base64解码的函数base64_decode,使用也很简单,传入编码后的字符串,返回原始字符串。

MD5是一种不可逆的编码,它采用摘要信息拼凑的方式可以将任意长度的十进制字符串或者二进制字节转换成固定32位长度的只包含小写字母的字符串。

通常情况下,MD5编码用来实现大数据的比较使用,MD5编码方式同样受GBK或者UTF-8的影响,GBK的“福哥”的MD5码是“”,而UTF-8的“福哥”的MD5码是“”。

PHP提供了一个专门用来完成MD5编码的函数md5,函数名称很直观,使用也非常简单,传入原始字符串,返回编码后的字符串。

今天福哥带着童鞋们了解了关于URL编码、Base64编码和MD5编码的知识,学会了在PHP语言当中使用这三种编码方式的技巧,一般情况下,学会这三种编码方式就足以应付绝大多数的场景下的数据编码的需要了。

下一课福哥将介绍在Python语言里面实现这三种编码方式的技巧,敬请期待~

‘叁’ php有没有查看当前的编码方式的方法

编码问题是解码者决定的,数据本身并不指明编码方式,而是读数据的解码者选择自己的解码方式
此处,php程序是数据本身,php解释器是解码者本身,
php解释器对php程序的编码方式并不应人类对php程序的编码方式理解不同而转移
因此,理论上不存在获取当前数据编码方式的接口,只要当时的编码者(譬如人类)显示指明编码方式,
解码者(譬如php解释器)方可获知

即使在解析以后再人类看来是一片乱码,PHP认为一切都是正确的.

当然从前端获取来的字符例外

如果不清楚字符串的编码格式的话,就可以将这段字符这样检查:
$encode=mb_detect_encoding($string,array("ASCII",'UTF-8′,"GB2312′,"GBK",'BIG5′));
echo$encode;
这样就能知道它是什么编码的了。后续操作还可以为其转码:
if($encode==“UTF-8″){
$string=iconv("UTF-8″,"GBK",$string);
}

‘肆’ phpurlencode()与urldecode()函数字符编码原理详解

PHP中的urlencode和urldecode函数字符编码原理如下

urlencode函数原理:将字符串中的非字母数字字符转换为十六进制形式,并在每个字符前加上百分号进行标识。空格字符被编码为加号,遵循标准的URL编码格式。 应用:主要用于将包含特殊字符的字符串编码为URL兼容的格式,以确保数据在URL传递过程中的完整性和兼容性。

urldecode函数原理:将已编码的URL字符串中的十六进制字符解码为原始字符。具体过程是通过去掉百分号,将剩余的十六进制数转换为十进制数,再用chr函数将十进制数转换回对应的字符。 应用:用于解码使用urlencode函数编码的URL字符串,还原为原始字符串。

总结: urlencode和urldecode函数是PHP中处理URL编码和解码的重要工具。 urlencode将非字母数字字符转换为URL兼容的十六进制格式,而urldecode则将这些十六进制格式还原为原始字符。 这两者的核心原理是基于字符的十六进制转换和特定规则的组合应用。

热点内容
哈斯编程 发布:2025-07-19 22:42:41 浏览:799
天猫精灵设置密码是多少 发布:2025-07-19 22:36:19 浏览:622
phppng透明 发布:2025-07-19 22:34:17 浏览:390
王者荣耀怎么配置好玩 发布:2025-07-19 22:02:45 浏览:755
合肥市编程 发布:2025-07-19 21:56:40 浏览:652
方舟手游火影服务器怎么进 发布:2025-07-19 21:44:06 浏览:540
学校安防存储系统 发布:2025-07-19 21:20:49 浏览:283
linux红帽下载 发布:2025-07-19 21:16:00 浏览:541
人员怎么配置 发布:2025-07-19 21:10:10 浏览:208
明日之后如何扫码登服务器 发布:2025-07-19 20:36:26 浏览:243