PHP自动判断字符集并转码
如果是文件形式的编码检查,还可以直接check utf-8的BOM信息。话不多说,直接上函数,这个函数是用来对字符串进行检查和转码的。
关于BOM
字节顺序记号(英:byte-order mark,BOM)是位于码点 U+FEFF 的统一码字符("零宽度无断空白")。当以 UTF-16 或 UTF-32 来将UCS/统一码字符所组成的字串编码时,这个字符被用来标示其字节序。它常被用来当做标示文件是以 UTF-8 、 UTF-16 或 UTF-32 编码的记号。
在大部分的字符编码中,字节顺序记号是一个不太可能出现在其它文件的样式(它通常看起来像是一个混淆的控制码的序列)。如果字节顺序记号被误解成统一码文件中真正的字符时,那么它将不可视,因为它是零宽度无断空白。在 Unicode3.2 中, U+FEFF 用于非字节顺序记号的用途已被舍弃(取而代之的是,使用 U+2060 来表示这种用途),以容许 U+FEFF 仅被地用于字节顺序记号的语意。
在 UTF-16 中,字节顺序记号被放置为档案或字符串流的第一个字符,以标示在此档案或字符串流中,以所有十六位元为单位的字码的尾序(字节顺序)。
- 如果十六位元单位被表示成大尾序,这字节顺序记号字符在序列中将呈现 0xFE ,其后跟着 0xFF(其中的 0x 用来标示十六进制)。
- 如果十六位元单位使用小尾序,这个字节序列为 0xFF ,其后接着0xFE。
而统一码中,值为U+FFFE 的码位被保证将不会被指定成一个统一码字符。这意味着 0xFF 、 0xFE 将只能被解释成小尾序中的U+FEFF(因为不可能是大尾序中的 U+FFFE )。
UTF-8 则没有字节顺序的议题。UTF-8编码过的字节顺序记号则被用来标示它是 UTF-8 的文件。它只用来标示一个 UTF-8 的档案,而不用来说明字节顺序。[1] 许多 视窗 程式(包含记事本)会添加字节顺序记号到 UTF-8 档案。然而,在 类Unix系统 系统(大量使用 en:text file ,用于 档案格式 ,用于行程间通讯)中,这种作法则不被建议采用。因为它会妨碍到如解译器脚本开头的 en:Shebang 等的一些重要的码的正确处理。它亦会影响到无法识别它的编程语言。如 gcc 会报告源码档开头有无法识别的字符。而在 PHP 中,如果没有启用输出缓冲(output buffering),它会使得页面内容开始被送往浏览器(即:用户标头档已被送出),这使 PHP 脚本无法指定用户标头档(HTTP Header)。字节顺序记号在 UTF-8 中被表示为序列 EF BB BF,对大部分未准备好处理 UTF-8 的 文本编辑器 及 网页浏览器 而言,在 ISO-8859-1 的环境中则会显示 ??? 。
虽然字节顺序记号亦可以用于 UTF-32 ,但这个编码很少用于传输,其规则如同 UTF-16 。对于已于IANA注册的字符集 UTF-16BE、UTF-16LE 、 UTF-32BE 和 UTF-32LE 等来说,不可使用字节顺序记号。文档开头的 U+FEFF 会被解释成一个(已舍弃的)"零宽度无断空白",因为这些字符集的名字已决定了其字节顺序。对于已注册字符集 UTF-16 和 UTF-32 来说,一个开头的 U+FEFF 则用来表示字节顺序。
推荐阅读
-
PHP自动判断字符集并转码
-
php脚本生成google play url的下载链接,下载apk并自动反编译后获取android版本号
-
php可以自动读取数据库内容然后判断用户的注册时间,大于多久的自动发送一封邮件吗?该怎么解决
-
PHP如何判断多张图片文件名,并返回缺少哪张图片?
-
wordpress如何判断手机、平板还是PC并显示对应的内容-Mobile Detect,wordpress-mobile_PHP教程
-
php readfile函数下载文件并判断权限的代码示例
-
php判断手机浏览还是web浏览,并执行相应的动作简单实例_php实例
-
PHP Script 回实现判断来路,对指定来路自动跳转
-
PHP自动识别字符集并完成转码详解
-
PHP获取文件的MD5值并判断是否被修改的例子