Posted by: ameliorate 2006-07-12 11:37 | ||||
輸出: mb_split()要用到正則,偶正則不熟 :(
|
Posted by: Dalamar 2006-07-12 11:46 |
算ascii碼,超過127的,前或者后多給一位 |
Posted by: ameliorate 2006-07-12 11:48 | ||
沒有更方便的辦法嗎? ![]() |
Posted by: aDang 2006-07-12 13:43 |
mb_ 開頭的一串函數 很好用 |
Posted by: ameliorate 2006-07-12 14:54 | ||
不要這么籠統(tǒng)啊。PHP手冊中的 mb_* 函數我都看過啦,沒有類似 str_split() 功能的函數。 如果依托 mb_strcut() 寫一個 mb_str_split(),要考慮到好多細節(jié)問題。 過程如下(每次截取36字節(jié),每個漢字為2字節(jié)): 1、截取由位置 0 起始的 36 個字節(jié); 2、考慮截取 36 個字節(jié)后,下一個起始位置是 35 還是 36(也就是說,第一次實際上截取了35個字節(jié)還是36個字節(jié))? 3、考慮到每次實際截取的字節(jié)數可能不是 36 的整數倍,那么究竟應截取多少次(ceil($string_length/$split_length)是不可靠的)? 4、如果用ASCII碼>127也有部分生僻字會出現問題。 5、擴展為 UTF-8 編碼,還要考慮每個漢字是3個字節(jié)。 |
Posted by: nio 2006-07-12 15:36 | ||||
看來你還是沒有仔細看,有個 mb_substr() 的函數也許對你有幫助 |
Posted by: ameliorate 2006-07-12 15:37 | ||
已解決。
|
Posted by: aDang 2006-07-12 15:45 |
在MBString庫里面,不用去關心字節(jié)的問題 mb_strimwidth() 截取你想要的寬度,比如40個半角英文的寬度 mb_strlen() 計算一下截出來了多少個字符 mb_substr() 從原字符串里面把截出來的字符刪掉 設置好了字符集,mb函數操作的一切,都是整個字符,比如‘a‘是一個字符,‘中‘也是一個字符 不需要自己去計算什么編碼方式下多少個字節(jié)表示一個字符 |
Posted by: ameliorate 2006-07-12 15:53 |
感謝 aDang、Dalamar、nio 的熱心幫助(按拼音字母排序, ![]() |