php rtrim() 格式化中文問題

先看如下代碼php

var_dump(rtrim("互聯網產品、", "、"));

咱們覺得會獲得結果 "互聯網產品", 但實際上得到的是 ""互聯網產��"函數

爲何呢, 其實這是編碼引發的問題.編碼

rtrim() 這個函數在處理字符時是按照ascii編碼來處理, 先看一下 "互聯網產品、" 的編碼:.net

$str = "互聯網產品、";
for ($i = 0; $i < strlen($str); $i++) {
    echo decbin(ord($str[$i])) . PHP_EOL;
}

/* Output
11100100
10111010
10010010
11101000
10000001
10010100
11100111
10111101
10010001
11100100
10111010
10100111
11100101
10010011
10000001
11100011
10000000
10000001
*/

能夠看出中文"品"的utf-8編碼是 "11100101 10010011 10000001", 而中文符號 "、" 的utf-8編碼是 "11100011 10000000 10000001"code

所以 rtrim() 在處理時會一併將 "品" 截掉最後一個字節, 剩下 "11100101 10010011", 從而引發亂碼的問題.utf-8

相關文章
相關標籤/搜索