四種字串定義語法
| 語法 | 範例 | 特性 |
| 單引號 | 'hello' | 不解析變數、僅跳脫 \' 和 \\、效能最佳 |
| 雙引號 | "hello $name" | 解析變數、完整跳脫序列 (\n, \t, \xXX, \u{XXXX}...) |
| Heredoc | <<<EOT ... EOT; | 類雙引號、適合多行、結束標記須獨立行首 |
| Nowdoc (PHP 5.3+) | <<<'EOT' ... EOT; | 類單引號、不解析、適合嵌入程式碼/SQL |
跳脫序列完整表 (雙引號/Heredoc)
| 序列 | 含義 |
| \n | 換行 (LF, 0x0A) |
| \r | 歸位 (CR, 0x0D) |
| \t | 水平定位 |
| \v | 垂直定位 (PHP 5.2.5+) |
| \f | 換頁 (PHP 5.2.5+) |
| \\ | 反斜線 |
| \$ | 美元符號 |
| \" | 雙引號 |
| \[0-7]{1,3} | 八進制字元 |
| \x[0-9A-Fa-f]{1,2} | 十六進制字元 |
| \u{XXXXXX} | Unicode code point (PHP 7.0+) |
變數解析規則 (雙引號/Heredoc)
<?php
$beer = 'Heineken';
echo "$beer's taste"; // OK: ' 非合法變數字元
echo "He drank $beers"; // ❌ 解析為 $beers (不存在)
echo "He drank ${beer}s"; // OK: 大括號界定
echo "He drank {$beer}s"; // OK: 複雜語法
$arr = ['foo' => 'bar'];
echo "Value: {$arr['foo']}"; // OK: 複雜語法支援陣列/物件
echo "Value: $arr[foo]"; // ⚠️ 先找常數 foo,觸發 Notice
?>
字元存取與修改
<?php
$str = 'abcdef';
echo $str[1]; // 'b' (0-based)
echo $str{1}; // 'b' (PHP 5.3+ 棄用,勿用)
$str[1] = 'X'; // 'aXcdef' - 單字元替換
$str[10] = 'Y'; // 自動補空格至長度 11: 'aXcdef Y'
// 陷阱:非整數索引
var_dump($str['foo']); // NULL + Notice (轉為 0)
var_dump(isset($str['foo'])); // true (索引 0 存在)
?>
編碼與記憶體
- PHP 字串為**位元組序列**,無內建編碼資訊 (二進位安全)
- 長度限制:
memory_limit (預設 128M/256M)
- 多位元組處理:
mb_strlen, mb_substr, iconv, mb_convert_encoding
- 字串連接:
. 運算子、.=、implode、sprintf
常用函數速查
| 函數 | 用途 |
strlen/mb_strlen | 長度 (位元組/字元) |
substr/mb_substr | 截取 |
strpos/mb_strpos | 尋找位置 |
str_replace | 替換 (大小寫敏感) |
preg_replace | 正則替換 |
explode/preg_split | 分割 |
trim/ltrim/rtrim | 去除空白 |
htmlspecialchars | HTML 轉義 (防 XSS) |
json_encode | JSON 編碼 |