`

(转)php判断字符串的编码和转码

    博客分类:
  • php
阅读更多
/**
* 如果对方的博客系统使用gb2312的编码的话,POST过来就会出现乱码(除非对方POST前先转换编码)。
* 在不能保证对方是否一定使用utf-8编码的情况下,自己做一个编码的检查和转换是很有必要的。
* 写了个函数来完成这个工作,原理很简单,因为gb2312/gbk是中文两字节,这两个字节是有取值范围的,
* 而utf-8中汉字是三字节,同样每个字节也有取值范围。而英文不管在何种编码情况下,都是小于128,只占用一个字节(全角除外)。
* @param <type> $string  字符串
* @param <type> $outEncoding  转化输出的编码
* @return <type>
*/

function safeEncoding($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
        return iconv($encoding, $outEncoding, $string);
}
分享到:
评论

相关推荐

    关于PHP自动判断字符集并转码的详解

    本文将详细解释这个过程的原理,并提供一个用于检测和转换字符串编码的PHP函数。 首先,让我们理解字符编码的基本概念。GBK和GB2312是中国常用的简体中文编码标准,它们都是基于ASCII扩展的,其中中文字符由两个...

    PHP自动识别字符集并完成转码详解

    在处理字符串时,字符编码问题是一项重要任务,尤其是在网络通信和数据交换中。本文将深入讲解如何使用PHP来自动识别字符集并完成转码,确保数据的正确显示和处理。 首先,我们需要理解不同字符编码的基本原理。UTF...

    完美的2个php检测字符串是否是utf-8编码函数分享

    在php开发中有时候会用到转码函数,比如iconv(),mb_convert_encoding()函数,在用函数转码的时候或者解码的时候我们有时候需要先判断当前字符串编码类型,不如是否是utf-8编码,是的话然后进行编码转换等操作。...

    PHP iconv()函数字符编码转换的问题讲解

    在php中iconv函数库能够完成各种字符集间的转换,是php编程中不可缺少的基础函数库;但有时候iconv对于部分数据转码会无缘无故的少一些。比如在转换字符”—”到gb2312时会出错。 下面一起慢慢看一下这个函数的用法...

    php检测文本的编码

    循环编码判断法是一种通过多次尝试不同编码转换,再将转换结果与原字符串比较,判断原字符串是否属于某种编码的方法。如果转换后的字符串和原字符串相同,则认为原字符串的编码即为当前尝试的编码。这种方法需要有一...

    PHP中把stdClass Object转array的几个方法

    但是需要注意的是,`json_decode`在处理非UTF-8编码的数据时会失败,因此如果JSON字符串不是UTF-8编码的,你需要在解码前进行转码。 总结上述知识点,我们可以得知,PHP中将stdClass对象转换为数组主要有以下几种...

    PHP实现微信图片上传到服务器的方法示例

    文章还提到了一些PHP的其他相关知识点和资源,例如《PHP微信开发技巧汇总》、《PHP编码与转码操作技巧汇总》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php字符串(string)用法总结》、《php+mysql...

    php使用ffmpeg向视频中添加文字字幕的实现方法

    这里使用了str_ireplace函数来进行字符串的替换,将视频文件的扩展名avi分别替换为srt和jpg格式,分别用于字幕文件和视频缩略图。 接下来,脚本中展示了一个名为flv_convert_get_thumb的PHP函数,用于实现字幕的...

    php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间

    然后,使用正则表达式匹配输出字符串来提取所需信息。 从给出的内容片段中,我们可以看到PHP通过FFmpeg获取视频信息的几个关键函数: 1. `getVideoCover()`:此函数用于获取视频的缩略图。它接收视频文件路径、...

    民航竞赛-网站安全12.docx

    8. **iconv转码问题**:当UTF-8编码的字符串转换为GB2312时,如果包含无法映射的字符,字符串可能会被截断,选项D是正确答案。 9. **AngularJS**:AngularJS是Google维护的一个前端JavaScript框架,用于构建动态Web...

    htaccess重写规则的功能作用.docx

    - `[QSA]`: 保留查询字符串,将原URL的查询参数附加到重写后的URL。 4. **RewriteCond**: 这是重写规则的条件,可以设置多个条件来决定何时执行`RewriteRule`。`RewriteCond test-pattern [flags]`,`test-pattern...

Global site tag (gtag.js) - Google Analytics