先來看代碼php
1 <?php 2 $charset = 'GBK'; 3 $str = '中華人民共和國中華人民共和國中華人民共和國中華人民共和國'; 4 $size = 17; 5 $str2 = iconv('UTF-8', $charset, $str); 6 $str3 = substr($str2, 0, $size);//.$str2; 7 $s = iconv($charset, 'UTF-8//IGNORE', $str3); 8 9 var_dump($s);
這裏GBK由於一個漢字字符算2個英文字符 因此當長度爲17的時候 會有字符破損工具
通過轉換UTF-8 而且忽略不合法字符的時候,結果居然是 false 和文檔中說的忽略字符測試
返回值達不到預期效果,通過測試發現這種狀況僅出如今末尾字符不合法的時候spa
當拼接其餘字符的時候(第六行註釋掉的部分去掉)返回是達到預期的命令行
在命令行下測試iconv工具code
命令以下blog
iconv -c -f gbk -t utf-8 input
input爲 17長度的$str3輸出的內容文檔
結果iconv的輸出是忽略了最後那半個破損的字符input
如下爲無證大師原話class
c的iconv即便加//ignore也會返回錯誤碼
處理不處理要調用方決定
但php沒作
所以,php巨爛 等人噴