一、轉義字符與特殊編碼
單引號 vs 雙引號
| 引號類型 | 支援轉義序列 |
單引號 '...' | \'、\\ |
雙引號 "..." | \n、\r、\t、\\、\$、\"、八進制 \[0-7]{1,3}、十六進制 \x[0-9A-Fa-f]{1,2} |
實例:十六進制輸出中文
echo "H\xf6me"; // 輸出:H鰉e(視終端編碼而定)
二、格式化輸出:printf / sprintf
printf("輸出內容 %.2f\n", $PI); // 直接輸出
$str = sprintf("%.2f", 3.14159); // 返回字串
// 常用格式符
%d 整數 %s 字串 %f 浮點數 %b 二進制
%10.2f 寬度10、小數2位、右對齊
%.9s 截取前9字元
三、字符串填充:str_pad
$index = ["one"=>1, "two"=>155, "three"=>1679];
echo str_pad("這是標題", 50, " ", STR_PAD_BOTH)."\n";
foreach ($index as $k=>$v) {
echo str_pad($k, 30, ".") . str_pad($v, 20, ".", STR_PAD_LEFT) . "\n";
}
/* 輸出:
這是標題
one............................1
two...........................155
three........................1679
*/
四、大小寫轉換與修剪
strtolower()、strtoupper()、ucfirst()、ucwords()
ltrim()、rtrim()、trim()(含 null、tab、換行、空格)
nl2br():\n → <br>
五、字符串比較
| 函數 | 說明 | 回傳值 |
strcmp($a,$b) | 區分大小寫 | $a>$b 返回 -1;$a<$b 返回 1;相等 0 |
strncmp($a,$b,$len) | 限制比較長度 | 同上 |
strcasecmp() / strncasecmp() | 不區分大小寫 | 同上 |
strcmp("aardvark","aardwolf"); // -1
strncmp("aardvark","aardwolf",4); // 0
六、查找與擷取子字串
substr:靈活切片
$var = "abcdefgh";
substr($var, 2); // "cdefgh" 從索引2到結尾
substr($var, 2, 3); // "cde" 長度3
substr($var, -1); // "h" 倒數1字元
substr($var, -5, 2); // "de" 倒數5起長度2
substr($var, -5, -2); // "def" 倒數5到倒數3
定位函數
strpos($haystack, $needle, $offset):首次出現位置
strrpos($haystack, $needle):最後一次出現(單字元)
strstr() / stristr():從首次出現處截取到結尾
strrchr():從最後一次出現處截取
分割與合併
$guest = "this is a string";
$arr = explode(" ", $guest); // 分割成陣列
sort($arr);
echo implode(",", $arr); // 合併為字串
// 輸出:a,is,string,this
七、替換子字串
substr_replace($source, $replace, $start, $length);
// 從 $start 起替換 $length 字元為 $replace
八、效能小貼士
- 單純字串連接用單引號
'a'.$b 比雙引號 "a$b" 略快(避免解析變數)。
- 大量字串拼接建議用陣列
[] 最後 implode()。
- 正則替換
preg_replace 比 str_replace 慢,能用後者就不用前者。