编码转换出错

数原型:string iconv ( string $in_charset , string $out_charset , string $str )
专程是第贰个参数表明:
the output charset.

发端是这么用的
$str = iconv('UTF-8', 'GB2312', unescape(isset($_GET['str'])? $_GET['str']:''));
上线后报一群那样的错:iconv() : Detected an illegal character in input string

用iconv()调换三个出口字符编码不协理的字符时,如iconv('utf-8', 'gb2312', 'www.111cn.net'),会遇上这么的谬误提示:

考虑到GB2312字符集相当小,换个大的吧,于是改成GBK:
$str = iconv('UTF-8', 'GBK', unescape(isset($_GET['str'])? $_GET['str']:''));
上线后依然报同样的错!

notice: iconv() [function.iconv]: detected an illegal character in input string ...

再认真读手册,发现有那样一段:
If you append the string //TRANSLIT to out_charset transliteration is activated. This means that when a character can't be represented in the target charset, it can be approximated through one or several similarly looking characters. If you append the string //IGNORE, characters that cannot be represented in the target charset are silently discarded. Otherwise, str is cut from the first illegal character.
于是乎改成:
$str = iconv('UTF-8', 'GBK//IGNORE', unescape(isset($_GET['str'])? $_GET['str']:''));
本地质度量试//IGNORE能忽略掉它不认得的字接着往下转,并且不报错,而//TRANSLIT是截掉它不认知的字及其背后的剧情,何况报错。//IGNORE是自家急需的。
明天等待上线看结果(那样不是好的做法,继续商量手册,上网搜搜看),呵呵。。。

因为gb2312表示的是简体汉语,不补助像"www.111cn.net"之类的特别复杂的汉字以及一些特殊字符,这当然会报错了,解决办法有两种:

在网络找到上边那篇小说,发掘mb_convert_encoding也能够,但成效比iconv差。

  1. 扩充出口字符编码的限定,如iconv('utf-8', 'gbk', 'www.111cn.net'),则足以正确地出口,因为gbk帮助的字符范围更广;

  2. 在输出的字符编码字符串前面加上"//ignore",如iconv('utf-8', 'gb2312//ignore', 'www.111cn.net'),那样压实际是忽视了无法调换的字符,制止了失误但却不能够科学地出口(即空白不、输出)。

改变字符串编码iconv与mb_convert_encoding的区别

上边来探视关于php教程 iconv() : detected an illegal character in input string管理办法

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)

$str = iconv('utf-8', 'gbk//ignore', unescape(isset($_get['str'])? $_get['str']:''));
本地质度量试//ignore能忽略掉它不认得的字接着往下转,并且不报错,而//translit是截掉它不认知的字及其背后的内容,并且报错。//ignore是本身索要的。
前段时间拭目以俟上线看结果(那样不是好的做法,继续研讨手册,上网搜搜看),呵呵。。。

用法:
string mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] )
急需先启用 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与mb_convert_encoding的区别

使用:
1. 发觉iconv在更改字符"-"到gb2312时会出错,若无ignore参数,全部该字符后边的字符串都心余力绌被保留。不管怎么,那些"-"都没办法儿调换到功,不能输出。其他mb_convert_encoding未有这一个bug.

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)

  1. mb_convert_encoding 能够钦赐各类输入编码,它会基于内容自动识别,可是施行功用比iconv差太多;如:$str = mb_convert_encoding($str,"euc-jp","ASCII,JIS,EUC-JP,SJIS,UTF- 8");“ASCII,JIS,EUC-JP,SJIS,UTF-8”的次第不一致作用也是有差别
  2. 貌似情况下用 iconv,独有当境遇无法鲜明原编码是何种编码,恐怕iconv转化后无法不奇怪突显时才用mb_convert_encoding 函数

用法:
string mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] )
急需先启用 mbstring 扩充库,在 php.ini里将; extension=php_mbstring.dll 前面的 ; 去掉

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.

string iconv ( string in_charset, string out_charset, string str )
注意:
其次个参数,除了能够钦命要转会到的编码以外,还足以追加四个后缀://translit 和 //ignore,
其中:
//translit 会自动将不能够直接倒车的字符形成贰个或多少个类似的字符,
//ignore 会忽略掉不能够转化的字符,而暗许效果是从第三个地下字符截断。
returns the converted string or false on failure.

$str = mb_convert_encoding($str, "UCS-2LE", "JIS, eucjp-win, sjis-win");
$str = mb_convert_encoding($str, "EUC-JP', "auto");

使用:
1. 发掘iconv在转移字符"-"到gb2312时会出错,若无ignore参数,全数该字符前面包车型大巴字符串都不也许被封存。不管如何,这么些"-"都力所不及转移成功,无法输出。另外mb_convert_encoding未有这些bug.

例子:
$content = iconv("GBK", "UTF-8", $content);
$content = mb_convert_encoding($content, "UTF-8", "GBK");

  1. mb_convert_encoding 能够钦点三种输入编码,它会依照剧情自动识别,可是施行功用比iconv差太多;如:$str = mb_convert_encoding($str,"euc-jp","ascii,jis,euc-jp,sjis,utf- 8");“ascii,jis,euc-jp,sjis,utf-8”的依次差别成效也可以有反差
  2. 诚如景观下用 iconv,唯有当遭遇无法分明原编码是何种编码,或然iconv转化后不可能符合规律展现时才用mb_convert_encoding 函数

您大概感兴趣的稿子:

  • 问个高难度的纷纷查询(在叁个时日段内的间隔查询)
  • PHP syntax error, unexpected $end 错误的一种原因及缓和
  • jQuery选中select控件 不或然设置selected的化解方法
  • php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE eval()''d code error
  • PHP Parse Error: syntax error, unexpected $end 错误的消除办法
  • w3wp进度爆发死锁ISAPI aspnet_isapi.dll报告它本人十分,原因Deadlock detected
  • jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误
  • C++中的三种持续public,protected,private详细剖判
  • CodeIgniter框架提醒Disallowed Key Characters的消除办法
  • PHP异常Parse error: syntax error, unexpected T_VACRUISER错误消除格局
  • pycharm 使用体验(九)化解No Python interpreter selected的标题
  • PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12消除办法
  • 强制SQL Server推行陈设使用并行升高在纷纭查询语句下的品质
  • 深深通晓C++中public、protected及private用法
  • jQuery中:selected接纳器用法实例
  • 在sqlserver中怎么着运用CTE解决复杂查询难点

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.

$str = mb_convert_encoding($str, "ucs-2le", "jis, eucjp-win, sjis-win");
$str = mb_convert_encoding($str, "euc-jp', "auto");

本文由365bet体育在线官网发布于365bet,转载请注明出处:编码转换出错

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。