'Hello' 或 "Hello",混用會語法錯誤$s = "I am a 'single quote string' inside double quotes"; $s = 'I am a "double quote string" inside single quotes';
| 情境 | 雙引號 | 單引號 |
|---|---|---|
| 變數解析 | "foo is $foo" → foo is 2 | 'foo is $foo' → foo is $foo(原樣輸出) |
| 逸出字元 | "\n" → 換行 | '\n' → 字面 \n |
| 逸出引號 | "\"" | '\'' |
| 逸出反斜線 | "\\" | '\\' |
效能:單引號不需掃描變數與逸出字元,解析速度略快,建議純靜態字串優先用單引號。
echo "value = {$arr[$i][$j]}"; // 正確解析多維陣列
echo "value = \{$var}"; // 輸出字面 {$var}
SQL 標準以單引號包裹字串字面值:
$sql = "SELECT * FROM users WHERE name = 'O\'Reilly'"; // 手動逸出 // 或 $name = "O'Reilly"; $sql = "SELECT * FROM users WHERE name = '" . mysqli_real_escape_string($conn, $name) . "'";
建議使用 Prepared Statement(PDO::prepare / mysqli_prepare)完全避免引號與注入問題。
echo 'value = ' . $var; // 連接後輸出 echo 'value = ', $var; // 直接多參數輸出,效能稍優
總結:靜態字串用單引號、需解析變數用雙引號、SQL 用參數化查詢、輸出多變數用逗號,兼顧可讀、安全與效能。