string substr(string $string, int $start [, int $length ])
| 參數 | 說明 |
|---|---|
| string | 必需,目標字符串 |
| start | 必需,開始位置。 ≥0:從左側第 start 個字符(0 為首字符) <0:從右側第 |start| 個字符開始 |
| length | 可選,截取長度。 ≥0:從 start 向右截取 length 個字符 <0:從字符串末尾向左截取,保留前 length 個字符 省略:截取到字符串結尾 |
<?php $str = "Welcome to www.jb51.net!"; echo substr($str, 0) . "<br>"; // 輸出:Welcome to www.jb51.net! (從 0 開始到結尾) echo substr($str, 4, 14) . "<br>"; // 輸出:ome to www.jb5 (索引 4 開始,長度 14) echo substr($str, -4, 4) . "<br>"; // 輸出:net! (倒數第 4 個字符開始,長度 4) echo substr($str, 0, -4) . "<br>"; // 輸出:Welcome to www.jb51. (從開頭截取到倒數第 4 個字符之前) ?>
原因:substr 按**字節**截取,UTF-8 中文字符佔 3 字節,截斷導致亂碼。
解決方案:
mb_substr($str, 0, 10, 'UTF-8')preg_match('/^.{10}/u', $str, $m); echo $m[0];join('', array_slice(preg_split('//u', $str), 0, 10))mb_substr($content, 0, 200) . '...'substr($filename, strrpos($filename, '.') + 1)substr_replace($phone, '****', 3, 4) (配合 substr_replace)substr 極快(C 層實現)。