来源: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函数。 首先,让我们理解字符编码的基本概念。GBK和GB2312是中国常用的简体中文...
本文将深入讲解如何使用PHP来自动识别字符集并完成转码,确保数据的正确显示和处理。 首先,我们需要理解不同字符编码的基本原理。UTF-8是最常用的多语言字符编码,它能够表示Unicode字符集中的所有字符。UTF-8的一...
在互联网世界中,IDN(Internationalized Domain Name,国际化域名)是用于支持非ASCII字符集的域名系统。这些域名允许使用各种语言的字符,比如中文、日文或阿拉伯文等。然而,由于早期的DNS(Domain Name System,...
在php中iconv函数库能够完成各种字符集间的转换,是php编程中不可缺少的基础函数库;但有时候iconv对于部分数据转码会无缘无故的少一些。比如在转换字符”—”到gb2312时会出错。 下面一起慢慢看一下这个函数的用法...
总结来说,在处理PHP字符编码转换时,尤其是中文等多字节字符集,可能会遇到截断字符的问题。传统的iconv函数虽然可以解决问题,但可能会导致数据丢失。mb_convert_encoding函数则提供了一种更为安全和可靠的替代...
中文域名转码在PHP中同样需要解决字符集编码问题,如GBK、UTF-8等,确保中文字符能够正确地在网络上传输和解析。 【标签】"asp"提示我们这个系统的核心在于ASP编程,尽管它已经被移植到PHP。在ASP中,处理中文域名...
punycode是一种编码方式,用于将Unicode字符(如中文字符)转换为ASCII字符集,以便在互联网的DNS(域名系统)中使用,因为DNS目前主要支持ASCII编码。 punycode转换在中文域名解析中起着关键作用。由于DNS系统设计...
2. **PHP字符串处理**:PHP提供了丰富的字符串处理函数,如`iconv`和`mb_string`系列函数,用于进行多字节字符集(MBCS)的转换。在这个项目中,这些函数会用于将中文域名转换为Punycode,这是一种将非ASCII字符转换...
二、PHP中的转码函数 在PHP中,可以使用内置的字符串函数来完成转码工作。在提供的代码示例中,我们看到了一个自定义的函数`unicode_encode`,它实现了从GBK编码转换到Unicode编码(更准确地说是UTF-16编码)的过程...
由于互联网最初的设计主要基于ASCII字符集,而中文字符不在这个范围内,因此需要将中文字符转化为ASCII可识别的形式,如Punycode编码。Punycode是一种将Unicode字符串转化为ASCII字符串的方法,常用于IDNA(国际化...
Unicode是一种包含全世界几乎所有字符的字符集,而Punycode是一种将Unicode转换为ASCII的编码方式,它是IDN(国际化域名)系统的一部分,使得非ASCII字符的域名可以在互联网上使用。 【HTML5】是HTML的最新版本,...
相比于iconv,`mb_convert_encoding()`可能更节省内存,特别是在处理多字节字符集时。 4. **修改PHP的memory_limit**: 要改变PHP的内存限制,可以在php.ini文件中直接修改`memory_limit`的值,例如设置为“256M”...
如果需要编码其他字符集的字符串,需要先进行转码,比如使用`iconv`或`mb_convert_encoding`函数。 总结来说,PHP处理JSON字符串主要依赖`json_encode()`和`json_decode()`这两个函数,它们是PHP与JSON数据交换的...
1. **字符串处理**:PHP内置了丰富的字符串函数,如`iconv`或`mb_convert_encoding`,用于在不同字符集之间进行转换,这在处理中文字符编码时尤为重要。 2. **URL编码**:可能使用了`urlencode`或`rawurlencode`...
确保MySQL数据库、数据表、字段以及PHP脚本都采用相同的字符集,如UTF-8。在创建数据库或表时,可以使用`CREATE DATABASE`或`CREATE TABLE`语句指定字符集,例如`CHARACTER SET utf8 COLLATE utf8_general_ci`。 2....
在进行Web开发或软件编程时,编码转换是一个经常会遇到的需求,尤其是在处理包含不同语言字符集的数据时。PHP作为一门广泛使用的服务器端脚本语言,提供了多种方法来处理编码转换的问题。在PHP中,`mb_convert_...
iconv函数要求用户明确指定输入和输出的字符集,而mb_convert_encoding函数在转换时可选地指定输入编码,如果不指定则使用内部字符编码。如果要指定多种输入编码,需要使用逗号分隔的字符串或者数组。 在转换能力上...