`

PHP判断字符集并转码的函数(转)

 
阅读更多

来源:http://hudeyong926.iteye.com/blog/1127196

===========================================================

      原理很简单,因为gb2312/gbk是中文两字节,这两个字节是有取值范围的,而utf-8中汉字是三字节,同样每个字节也有取值范围。而英文不 管在何种编码情况下,都是小于128,只占用一个字节(全角除外)。

       如果是文件形式的编码检查,还可以直接check utf-8的BOM信息。话不多说,直接上函数,这个函数是用来对字符串进行检查和转码的。

<?php
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);
}
?>  

 

 =================================================

另外有一种方法也很巧妙:

function getSafeCode($value){
  $value_1= $value;
  $value_2 = @iconv("utf-8","gb2312",$value_1);
  $value_3 = @iconv("gb2312","utf-8",$value_2);

  if (strlen($value_1) == strlen($value_3)){
    return $value_2;
  }else{
    return $value_1;
  }
} 

 

分享到:
评论

相关推荐

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

    在这种情况下,自动判断字符集并进行转码就显得尤为重要。本文将详细解释这个过程的原理,并提供一个用于检测和转换字符串编码的PHP函数。 首先,让我们理解字符编码的基本概念。GBK和GB2312是中国常用的简体中文...

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

    本文将深入讲解如何使用PHP来自动识别字符集并完成转码,确保数据的正确显示和处理。 首先,我们需要理解不同字符编码的基本原理。UTF-8是最常用的多语言字符编码,它能够表示Unicode字符集中的所有字符。UTF-8的一...

    IDN.rar_ punycode a_PunyCode_Punycode php_php punycode_转码

    在互联网世界中,IDN(Internationalized Domain Name,国际化域名)是用于支持非ASCII字符集的域名系统。这些域名允许使用各种语言的字符,比如中文、日文或阿拉伯文等。然而,由于早期的DNS(Domain Name System,...

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

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

    PHP中iconv函数转码时截断字符问题的解决方法

    总结来说,在处理PHP字符编码转换时,尤其是中文等多字节字符集,可能会遇到截断字符的问题。传统的iconv函数虽然可以解决问题,但可能会导致数据丢失。mb_convert_encoding函数则提供了一种更为安全和可靠的替代...

    基于ASP的中文域名转码系统 php版.zip

    中文域名转码在PHP中同样需要解决字符集编码问题,如GBK、UTF-8等,确保中文字符能够正确地在网络上传输和解析。 【标签】"asp"提示我们这个系统的核心在于ASP编程,尽管它已经被移植到PHP。在ASP中,处理中文域名...

    PHP实例开发源码—中文域名punycode转码工具.zip

    punycode是一种编码方式,用于将Unicode字符(如中文字符)转换为ASCII字符集,以便在互联网的DNS(域名系统)中使用,因为DNS目前主要支持ASCII编码。 punycode转换在中文域名解析中起着关键作用。由于DNS系统设计...

    PHP实例开发源码—中文域名转码系统HTML5版.zip

    2. **PHP字符串处理**:PHP提供了丰富的字符串处理函数,如`iconv`和`mb_string`系列函数,用于进行多字节字符集(MBCS)的转换。在这个项目中,这些函数会用于将中文域名转换为Punycode,这是一种将非ASCII字符转换...

    PHP版 汉字转码的实现详解

    二、PHP中的转码函数 在PHP中,可以使用内置的字符串函数来完成转码工作。在提供的代码示例中,我们看到了一个自定义的函数`unicode_encode`,它实现了从GBK编码转换到Unicode编码(更准确地说是UTF-16编码)的过程...

    ASP实例开发源码-中文域名转码系统 php版.zip

    由于互联网最初的设计主要基于ASCII字符集,而中文字符不在这个范围内,因此需要将中文字符转化为ASCII可识别的形式,如Punycode编码。Punycode是一种将Unicode字符串转化为ASCII字符串的方法,常用于IDNA(国际化...

    基于PHP的中文域名转码系统HTML5版 v1.2.zip

    Unicode是一种包含全世界几乎所有字符的字符集,而Punycode是一种将Unicode转换为ASCII的编码方式,它是IDN(国际化域名)系统的一部分,使得非ASCII字符的域名可以在互联网上使用。 【HTML5】是HTML的最新版本,...

    php解决Allowed memory size of bytes exhausted

    相比于iconv,`mb_convert_encoding()`可能更节省内存,特别是在处理多字节字符集时。 4. **修改PHP的memory_limit**: 要改变PHP的内存限制,可以在php.ini文件中直接修改`memory_limit`的值,例如设置为“256M”...

    php下的json字符串转化讲解共3页.pdf.zip

    如果需要编码其他字符集的字符串,需要先进行转码,比如使用`iconv`或`mb_convert_encoding`函数。 总结来说,PHP处理JSON字符串主要依赖`json_encode()`和`json_decode()`这两个函数,它们是PHP与JSON数据交换的...

    PHP中文域名转码HTML5版v1.2

    1. **字符串处理**:PHP内置了丰富的字符串函数,如`iconv`或`mb_convert_encoding`,用于在不同字符集之间进行转换,这在处理中文字符编码时尤为重要。 2. **URL编码**:可能使用了`urlencode`或`rawurlencode`...

    mysql+php中文乱码问题及mysql时间函数.rar

    确保MySQL数据库、数据表、字段以及PHP脚本都采用相同的字符集,如UTF-8。在创建数据库或表时,可以使用`CREATE DATABASE`或`CREATE TABLE`语句指定字符集,例如`CHARACTER SET utf8 COLLATE utf8_general_ci`。 2....

    PHP下编码转换函数mb_convert_encoding与iconv的使用说明

    在进行Web开发或软件编程时,编码转换是一个经常会遇到的需求,尤其是在处理包含不同语言字符集的数据时。PHP作为一门广泛使用的服务器端脚本语言,提供了多种方法来处理编码转换的问题。在PHP中,`mb_convert_...

    php 转换字符串编码 iconv与mb_convert_encoding的区别说明

    iconv函数要求用户明确指定输入和输出的字符集,而mb_convert_encoding函数在转换时可选地指定输入编码,如果不指定则使用内部字符编码。如果要指定多种输入编码,需要使用逗号分隔的字符串或者数组。 在转换能力上...

Global site tag (gtag.js) - Google Analytics