一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - php iconv() : Detected an illegal character in input string

php iconv() : Detected an illegal character in input string

2019-11-13 11:51php教程網 PHP教程

PHP傳給JS字符串用ecsape轉換加到url里,又用PHP接收,再用網上找的unscape函數轉換一下,這樣得到的字符串是UTF-8的,但我需要的是GB2312,于是用iconv轉換

開始是這樣用的
$str = iconv('UTF-8', 'GB2312', unescape(isset($_GET['str'])? $_GET['str']:''));
上線后報一堆這樣的錯:iconv() : Detected an illegal character in input string

考慮到GB2312字符集比較小,換個大的吧,于是改成GBK:
$str = iconv('UTF-8', 'GBK', unescape(isset($_GET['str'])? $_GET['str']:''));
上線后還是報同樣的錯!

再認真讀手冊,發現有這么一段:
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是我需要的。
現在等待上線看結果(這樣不是好的做法,繼續琢磨手冊,上網搜搜看),呵呵。。。

在網上找到下面這篇文章,發現mb_convert_encoding也可以,但效率比iconv差。


轉換字符串編碼iconv與mb_convert_encoding的區別

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] )
需要先啟用 mbstring 擴展庫,在 php.ini里將; extension=php_mbstring.dll 前面的 ; 去掉

string iconv ( string in_charset, string out_charset, string str )
注意:
第二個參數,除了可以指定要轉化到的編碼以外,還可以增加兩個后綴://TRANSLIT 和 //IGNORE,
其中:
//TRANSLIT 會自動將不能直接轉化的字符變成一個或多個近似的字符,
//IGNORE 會忽略掉不能轉化的字符,而默認效果是從第一個非法字符截斷。
Returns the converted string or FALSE on failure.

使用:
1. 發現iconv在轉換字符"-"到gb2312時會出錯,如果沒有ignore參數,所有該字符后面的字符串都無法被保存。不管怎么樣,這個"-"都無法轉換成功,無法輸出。另外mb_convert_encoding沒有這個bug.
2. 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”的順序不同效果也有差異
3. 一般情況下用 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.

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 哇嘎在线精品视频在线观看 | 日本高清在线观看天码888 | 91碰碰| 视频国产91 | 青草园网站在线观看 | 四虎永久网址影院 | 深夜影院a| aaa黄色| 免费草比视频 | 精品无码一区二区三区中文字幕 | 精东影业传媒全部作品 | 免费片在线观看高清 | 国产午夜大片 | 扒开双腿猛进入爽爽视频ai | 皇上好大好硬好涨好深好爽 | 北岛玲亚洲一区在线观看 | 成人影院免费在线观看 | 俄罗斯三级完整版在线观看 | 欧美亚洲国产一区二区三区 | 色欲麻将| jiujiure精品 | 欧美一级特黄特色大片免费 | 18xxxx中国| 精品国产一区二区 | caopo视频进入离开 | 亚洲 欧美 中文 日韩 另类 | 欧美一级片免费在线观看 | 亚洲天堂视频在线观看免费 | 色屁屁二区 | 成人福利| 亚洲欧美精品久久 | 鄂州一家三口完整版免费 | 9420高清完整版在线观看国语 | 美女被视频 | 久久综合久综合久久鬼色 | 日韩在线中文字幕 | 午夜爱| 国产精品13p | 欧美大陆日韩一区二区三区 | 调教人妖| 美国女网址www呦女 美国复古性经典xxxxx |