字串處理是 Web 開發高頻操作。掌握核心函數行為差異、編碼陷阱與安全性考量,能寫出更健壯的代碼。
string htmlentities(string $string, int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, string $encoding = 'UTF-8', bool $double_encode = true)
htmlspecialchars() 僅轉換 `&`, `"`, `'`, `<`, `>`,**效能較好、輸出體積較小**,**防 XSS 通常足夠**。<?php
$input = ' & "quotes" \'single\'';
echo htmlspecialchars($input, ENT_QUOTES, 'UTF-8');
// <script>alert("XSS")</script> & "quotes" 'single'
echo htmlentities($input, ENT_QUOTES, 'UTF-8');
// 同上,但若含 ©® 等也會轉為 © ®
?>
string nl2br(string $string, bool $is_xhtml = true)
<?php
$text = "第一行\n第二行\r\n第三行";
echo nl2br(htmlspecialchars($text));
// 第一行
// 第二行
// 第三行
?>
string quotemeta(string $string)
<?php
$pattern = quotemeta('cost: $100 (50% off)'); // cost: \$100 \(50\% off\)
echo "/$pattern/"; // 可直接用於正則
?>
string rtrim(string $string, string $characters = " \t\n\r\0\x0B")
<?php
$path = '/var/www/html///';
echo rtrim($path, '/'); // /var/www/html
$str = " hello world ";
echo trim($str); // "hello world"
?>
<?php
$table = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES, 'UTF-8');
print_r($table);
// ['&' => '&', '"' => '"', ...]
// 可用於自訂編碼邏輯或除錯
?>
<?php
$trans = ['&' => '&', '<' => '<', '>' => '>'];
echo strtr($input, $trans); // 單次掃描完成多重替換,比 str_replace 陣列快
?>
| 場景 | 推薦函數組合 | 關鍵點 |
|---|---|---|
| 使用者輸入輸出到 HTML | `htmlspecialchars($input, ENT_QUOTES, 'UTF-8')` | 防 XSS 核心,指定編碼、雙引號單引號皆轉 |
| 純文字含換行輸出到 HTML | `nl2br(htmlspecialchars($input, ENT_QUOTES, 'UTF-8'))` | 先編碼再換行,避免標籤破壞 |
| 動態建構正則 | `preg_quote($input, $delimiter)` | 轉義元字元+分隔符,比 quotemeta 完整 |
| 移除尾部特定字元 (如路徑 /) | `rtrim($path, '/')` | 理解字元列表而非子字串語意 |
| 批次替換多組鍵值 | `strtr($str, $map)` | 單次掃描、不重複替換、效能優於 str_replace 陣列 |
熟練運用這組核心字串函數,並理解其編碼、語意與效能特性,是 PHP 開發者處理文字資料的基本功。