簡述一下今天遇到的問題:
在My Code裡面有如下程式碼片段:
header("Content-type:text/html;charset=utf8"); echo rtrim("威、","、");
本來的預想是輸出“威”。然而事與願違,輸出了幾個亂碼。這是為什麼呢?容我細細道來。
首先要知道rtrim函數的功能,它的第二個參數是一個string,其中的每個char都會被拿出來作為將要被去除的字元。比如這樣:
echo rtrim("blakefezabc", "cab"); //output blakefez
是的,輸出結果是blakefez。
這個函數的實現應該也比較簡單:
①、從第一個參數的最後一個字元開始向左遍曆,判斷該位元組是否在第二個參數中。
②、如果存在則去掉該位元組,繼續第一步。如果不存在,則結束。
請注意,我上面用的是位元組。是的,這個函數是非multibyte-safe的函數。也就是說,當我們的參數中有些字元是多位元組的,那麼就會產生不想要的結果。比如一開始說的rtrim(“威、”, “、”)。由於”威”和”、”都是utf8編碼的。也就是多位元組字元。其中,”威”的編碼是0xE5 0xA8 0x81,”、”的編碼是0xE3 0x80 0x81,所以,在rtrim函數眼裡,它看到的是:rtrim(“0xE5 0xA8 0x81 0xE3 0x80 0x81”, “0xE3 0x80 0x81”);所以最後輸出的結果就是0xE5 0xA8,這時候再轉換為utf8編碼,就變成亂碼啦。
').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('
').text(i)); }; $numbering.fadeIn(1700); }); });
以上就介紹了 rtrim函數的一個坑,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。