PHP字符編碼轉換庫iconv的一個細節

先來看代碼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巨爛 等人噴
相關文章
相關標籤/搜索