先看如下代碼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