之--http://www.jb51.net/article/21451.htm

mb_convert_encoding这个函数是用来转换编码的。原来一直对程序编码这一概念不理解,不过现在好像有点开窍了。
 
 
不过英文一般不会存在编码问题,只有中文数据才会有这个问题。比如你用Zend Studio或Editplus写程序时,用的是gbk编码,如果数据需要入数据库,而数据库的编码为utf8时,这时就要把数据进行编码转换,不然进到数据库就会变成乱码。

mb_convert_encoding的用法见官方: 
http://cn.php.net/manual/zh/function.mb-convert-encoding.php

做一个GBK To UTF-8

复制代码代码如下:
<?php 
header("content-Type: text/html; charset=Utf-8"); 
echo mb_convert_encoding("妳係我的友仔", "UTF-8", "GBK"); 
?> 

再来个GB2312 To Big5

复制代码代码如下:
<?php 
header("content-Type: text/html; charset=big5"); 
echo mb_convert_encoding("你是我的朋友", "big5", "GB2312"); 
?> 

不过要使用上面的函数需要安装但是需要先enable mbstring 扩展库。

PHP中的另外一个函数iconv也是用来转换字符串编码的,与上函数功能相似。

下面还有一些详细的例子: 
iconv — Convert string to requested character encoding 
(PHP 4 >= 4.0.5, PHP 5) 
mb_convert_encoding — Convert character encoding 
(PHP 4 >= 4.0.6, PHP 5)

用法: 
string mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] ) 
需要先enable mbstring 扩展库,在 php.ini里将; extension=php_mbstring.dll 前面的 ; 去掉 
mb_convert_encoding 可以指定多种输入编码,它会根据内容自动识别,但是执行效率比iconv差太多;

string iconv ( string in_charset, string out_charset, string str ) 
注意:第二个参数,除了可以指定要转化到的编码以外,还可以增加两个后缀://TRANSLIT 和 //IGNORE,其中 //TRANSLIT 会自动将不能直接转化的字符变成一个或多个近似的字符,//IGNORE 会忽略掉不能转化的字符,而默认效果是从第一个非法字符截断。 
Returns the converted string or FALSE on failure.

使用:

发现iconv在转换字符”—”到gb2312时会出错,如果没有ignore参数,所有该字符后面的字符串都无法被保存。不管怎么样,这个”—”都无法转换成功,无法输出。 另外mb_convert_encoding没有这个bug.

一般情况下用 iconv,只有当遇到无法确定原编码是何种编码,或者iconv转化后无法正常显示时才用mb_convert_encoding 函数.

from_encoding is specified by character code name before conversion. it can be array or string - comma separated enumerated list. If it is not specified, the internal encoding will be used. 
/* Auto detect encoding from JIS, eucjp-win, sjis-win, then convert str to UCS-2LE */ 
$str = mb_convert_encoding($str, “UCS-2LE”, “JIS, eucjp-win, sjis-win”); 
/* “auto” is expanded to “ASCII,JIS,UTF-8,EUC-JP,SJIS” */ 
$str = mb_convert_encoding($str, “EUC-JP”, “auto”);

例子:

复制代码代码如下:
$content = iconv("GBK", "UTF-8", $content); 
$content = mb_convert_encoding($content, "UTF-8","GBK"); 

PHP中使用mb_convert_encoding转码的小陷阱
在php程序中使用mb_convert_encoding()方法进行字符编码转换大家都很熟悉了,平时也在大量的使用。而且在一般情况下该方法也表现的足够好,值得表扬。但在一个项目中我们需要使用它进行UTF8到GBK的转换,在转换一些特殊字符时发现了一个不大不小的问题。具体表现为mb把在utf8可编码的字符而在gbk中不可编码的字符都转成了\0x00\0x80,这样就导致转换后的gbk字符是有问题的。 
在我们的意识中,在进行字符编码转换的过程中,如果遇到目标编码不可表现的字符,转码程序应该做的是舍弃这种字符,这样虽然丢失了部分数据,但不会导致转码的字符序列不可用。不清楚mb为什么要使用上述方式而不是舍弃方式。 
临时的解决方式是对转码后的字符串序列进行过滤,过滤掉所有\x00\80的字符;又或者在转义之前对utf8的字符串进行过滤,过滤掉ut8可表示而gbk不可表示的所有字符,从实现难度上来讲,第一种过滤方式比较容易做到。

(转)PHP下编码转换函数mb_convert_encoding与iconv的使用说明的更多相关文章

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

    mb_convert_encoding这个函数是用来转换编码的. 不过英文一般不会存在编码问题,只有中文数据才会有这个问题.比如你用Zend Studio或Editplus写程序时,用的是gbk编码, ...

  2. PHP iconv()编码转换函数用法示例

    PHP iconv()字符编码转换函数的用法,iconv()函数,在php5中是内置的,语法格式:iconv("UTF- 8","GB2312//IGNORE" ...

  3. php 字符编码转换函数 iconv mb_convert_encoding比较

    在使用PHP处理字符串时,我们经常会碰到字符编码转换的问题,你碰到过iconv转换失败吗? 发现问题时,网上搜了搜,才发现iconv原来有bug ,碰到一些生僻字就会无法转换,当然了配置第二个参数时, ...

  4. php数组编码转换函数的示例

    场景说明/问题描述: Ajax提交页面编码为gb2312,数据库编码为utf8,在不更改页面及数据库编码的情况下插入数据. 自定义函数:  代码如下 复制代码 function array_iconv ...

  5. js 字符串编码转换函数

    escape 方法 对 String 对象编码以便它们能在所有计算机上可读, escape(charString) 必选项 charstring 参数是要编码的任意 String 对象或文字. 说明 ...

  6. 解决Delphi7的自带的UTF-8编码转换函数BUG

    Delphi7及其以下版本的 VCL 只支持 Ansi, 所以... WideString 与 UTF8String (定义与 AnsiString 相同) 并没有办法正确的在 VCL 中显示 Del ...

  7. PHP转码函数mb_convert_encoding() 和iconv()

    注意:函数mb_convert_encoding的执行效率比iconv差,且需开启php的mbstring扩展. 一般情况下使用iconv,但此函数在碰到无法转码字符会丢弃,此种情况下可以用mb_co ...

  8. ubuntu下编码转换工具

    ubuntu打开windows下的txt或者代码文件,经常会出现乱码, ubuntu自带一种转换工具,是命令行的,下面提供一种最简单的方法进行转换 比如要转换的文件为1.txt,进入1.txt的目录 ...

  9. JavaScript URL编码转换函数 encodeURIComponent()

    encodeURIComponent()定义和用法 encodeURIComponent() 函数可把字符串作为 URI 组件进行编码. 语法:encodeURIComponent(URIstring ...

随机推荐

  1. 保留你的dSYM文件

    大家编译iPhone程序的时候,都会发现二进制文件的旁边生成了一个.dSYM文件.以前一直不知道这个文件是用来干嘛的,今天才知道这个是symbol file,用来debug用的. 大家可以读读这篇文档 ...

  2. MVC自学系列之二(MVC控制器-Controllers)

      Controllers的职责 1.MVC模式中的Controllers的职责是对用户的输入做出响应,对用户的输入在实体上做一些变化.它关心的是应用的流动,处理传入的数据,并给相关的View提供数据 ...

  3. 用 Webgoat 撬动地球,看安全测试的引路石!

    测试工程师是很多人迈进软件行业的起点.从负责很小的局部到把握整个产品的质量,每个人花费的时间长短不一--从功能到性能.可用性到容错性.从兼容性到扩展性.稳定性到健壮性--方方面面逐渐做广做深. 不过, ...

  4. Android仿微信SlideView聊天列表滑动删除效果

    package com.ryg.slideview; import com.ryg.slideview.MainActivity.MessageItem; //Download by http://w ...

  5. Android如何正确的保存文件

    在Android 官方开发文档中有一篇文档来介绍如何保存应用的数据,但笔者用过很多程序(从知名的到不知名的)处理的都不是很完美,或者 没有按照Android 开发团队建议的方式去保存他们应用的数据.当 ...

  6. SQL语句 远程操作数据库

    --远程操作数据库SQL语句exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '211.81.251.85 'exec sp_addlinkedsr ...

  7. 开源网络备份软件 bacula 的安装、配置和运行

    安装bacula 1 bacula的几种网络备份拓扑 前面文章介绍了bacula有5个组成部分,在实际的应用中,没有必要将5个部分分别放在不同的服务器上,它们之间的某些部分是可以合并的,常见的bacu ...

  8. [LeetCode#266] Palindrome Permutation

    Problem: Given a string, determine if a permutation of the string could form a palindrome. For examp ...

  9. Scala:(1)变量

    Scala中变量需要注意的地方: (1)val,var val 定义的声明是一个常量,不能改变内容. var定义的声明是一个变量,可以改变其内容 在Scala中,尽可能使用val val answer ...

  10. git_share

    linux 环境(192.168.8.58) 1. 生成rsa key $ ssh-keygen 如果你之前没有跑过这个文件, 接受默认选项即可. 这样你会在 ~/.ssh/下看到 id_rsa和id ...