关于PHP自动判断字符集并转码的详解
2023-06-13 09:15:02 时间
原理很简单,因为gb2312/gbk是中文两字节,这两个字节是有取值范围的,而utf-8中汉字是三字节,同样每个字节也有取值范围。而英文不管在何种编码情况下,都是小于128,只占用一个字节(全角除外)。
如果是文件形式的编码检查,还可以直接checkutf-8的BOM信息。话不多说,直接上函数,这个函数是用来对字符串进行检查和转码的。
复制代码代码如下:
如果是文件形式的编码检查,还可以直接checkutf-8的BOM信息。话不多说,直接上函数,这个函数是用来对字符串进行检查和转码的。
<?php
functionsafeEncoding($string,$outEncoding="UTF-8")
{
$encoding="UTF-8";
for($i=0;$i<strlen($string);$i++)
{
if(ord($string{$i})<128)
continue;
if((ord($string{$i})&224)==224)
{
//第一个字节判断通过
$char=$string{++$i};
if((ord($char)&128)==128)
{
//第二个字节判断通过
$char=$string{++$i};
if((ord($char)&128)==128)
{
$encoding="UTF-8";
break;
}
}
}
if((ord($string{$i})&192)==192)
{
//第一个字节判断通过
$char=$string{++$i};
if((ord($char)&128)==128)
{
//第二个字节判断通过
$encoding="GB2312";
break;
}
}
}
if(strtoupper($encoding)==strtoupper($outEncoding))
return$string;
else
returniconv($encoding,$outEncoding,$string);
}
?>
相关文章
- 企业版php自动发卡平台,企业版PHP自动发卡平台源码V6.3版
- PHP官方手册研读--php的垃圾回收机制
- [PHP] apache在worker模式配置fastcgi使用php-fpm详解编程语言
- [PHP] 自动加载的实现详解编程语言
- 如何使用PHP连接MySQL数据库(php如何关联mysql)
- PHP和MySQL:构建动态网站的利器(php与mysql)
- 如何在Linux中配置PHP(linux怎么配置php)
- 探寻Linux下PHP路径之旅(linux查看php路径)
- PHP Fatal error: Uncaught Error: Call to undefined function pcntl_fork().. 开启php pcntl扩展实现多进程详解编程语言
- PHP命令执行php文件需要注意的问题详解编程语言
- 迈出新步伐:Linux下快速PHP升级(linux下php升级)
- PHP连接MSSQL库的方法(php链接mssql)
- 初探Linux中的PHP文件之旅(linux创建php文件)
- PHP不支持MySQL:危机深重的问题(php不支持mysql)
- PHP开启Redis之路 正确的开启方式(php开启redis)
- PHP在Linux下安装配置指南(php搭建环境linux)
- MacOS上配置PHP环境的指南(Macos配置php)
- PHP添加MySQL扩展:快速实现数据库连接(php添加mysql扩展)
- 防止MySQL注入攻击,PHP静态解决方案(mysql防注入 php)
- PHP与MSSQL的良好结合,发挥强大的功能(php和mssql)
- MySQL和PHP中的目录结构说明(mysql中php的目录)
- PHP静态新闻列表自动生成代码
- PHP操作mysql函数详解,mysql和php交互函数
- PHP和Mysqlweb应用开发核心技术第1部分Php基础-1开始了解php
- php循环语句for()与foreach()用法区别介绍
- PHP中如何调用webservice的实例参考
- PHP实现今天是星期几的几种写法
- php中Y2K38的漏洞解决方法实例分析