PHP 字串函數不會修改原字串,皆回傳新字串。記得接收回傳值:
$str = ' hello ';
$str = trim($str); // 必須重新指派
// 錯誤寫法:trim($str); // 原 $str 不變
| 函數 | 說明 | 預設移除字元 |
|---|---|---|
ltrim() | 移除左側字元 | " \t\n\r\0\x0B" |
rtrim() | 移除右側字元 | 同上 |
trim() | 移除兩側字元 | 同上 |
第二參數 charlist 可自訂移除字元,支援範圍 ..:
<?php
$str = "123Hello...";
echo ltrim($str, '0..9'); // "Hello..." (移除左側數字)
echo rtrim($str, '.'); // "123Hello" (移除右側點號)
echo trim($str, '0..9 A..Z .'); // "ello" (移除兩側數字、大寫、點號)
?>
<?php
$str = 'LAMP';
echo str_pad($str, 10); // "LAMP " (右側空格)
echo str_pad($str, 10, '-=', STR_PAD_LEFT); // "-=-=-=LAMP"
echo str_pad($str, 10, '_', STR_PAD_BOTH); // "___LAMP___"
?>
STR_PAD_RIGHT (預設):右側填補STR_PAD_LEFT:左側填補STR_PAD_BOTH:兩側填補 (左側優先多一個)| 函數 | 說明 | 範例輸入 | 範例輸出 |
|---|---|---|---|
strtolower() | 全轉小寫 | "HeLLo" | "hello" |
strtoupper() | 全轉大寫 | "HeLLo" | "HELLO" |
ucfirst() | 首字母大寫 | "hello world" | "Hello world" |
ucwords() | 每單詞首字母大寫 | "hello world" | "Hello World" |
組合技:首字大寫、其餘小寫 → ucfirst(strtolower($str))
上述函數僅處理 ASCII。中文請用 mb_strtolower()、mb_convert_case() 並指定編碼:
<?php
mb_internal_encoding('UTF-8');
echo mb_convert_case('hello WORLD', MB_CASE_TITLE); // "Hello World"
?>
<?php
echo nl2br("Line 1\nLine 2\r\nLine 3");
// Line 1
// Line 2
// Line 3
<?php
$str = ' & "quotes"';
echo htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
// <script>alert("XSS")</script> & "quotes"
| 旗標 | 行為 |
|---|---|
ENT_COMPAT | 預設。雙引號實體化,單引號不處理 |
ENT_QUOTES | 雙引號、單引號皆實體化 (推薦) |
ENT_NOQUOTES | 引號不處理 |
ENT_HTML5 | HTML5 模式 (PHP 5.4+) |
<?php
$str = '中文 "quote" bold';
echo htmlentities($str, ENT_QUOTES, 'UTF-8');
// 中文 "quote" <b>bold</b>
差異:htmlspecialchars 只處理 & " ' < >;htmlentities 處理所有有實體對應的字元。
<?php
$str = '重要 粗體 ';
echo strip_tags($str); // "重要 粗體 惡意"
echo strip_tags($str, ''); // "重要 粗體 惡意" (保留 b,i,u)
?>
警告:strip_tags() 不保證 XSS 安全 (屬性、事件處理器可能殘留)。輸出到 HTML 必須搭配 htmlspecialchars()。
<?php
function sanitizeInput(string $input): string
{
// 1. 移除反斜線 (magic_quotes_gpc 遺留)
$input = stripslashes($input);
// 2. HTML 實體化 (防 XSS)
$input = htmlspecialchars($input, ENT_QUOTES, 'UTF-8');
// 3. 可選:移除標籤 (視業務需求)
// $input = strip_tags($input, '');
return $input;
}
?>
echo strrev('hello'); // "olleh"
<?php
$num = 1234567.89123;
echo number_format($num); // "1,234,568" (四捨五入)
echo number_format($num, 2); // "1,234,567.89"
echo number_format($num, 2, ',', '.'); // "1.234.567,89" (歐洲格式)
?>
<?php
$password = 'secret123';
// 不建議直接用 md5/sha1 (已破解,速度快易暴力破解)
// 密碼請用 password_hash() / password_verify()
echo md5($password); // 32 字元十六進位
echo sha1($password); // 40 字元
// 現代密碼雜湊 (PHP 5.5+)
$hash = password_hash($password, PASSWORD_DEFAULT); // 自動選演算法 (目前 bcrypt)
if (password_verify($password, $hash)) {
echo '驗證通過';
}
// 檔案雜湊
echo md5_file('large.zip');
?>
<?php
// 自然排序比較 (人類直覺)
echo strnatcmp('file2.txt', 'file10.txt'); // -1 (2 < 10)
echo strcmp('file2.txt', 'file10.txt'); // 1 (ASCII '2' > '1')
// 大小寫不敏感版本
strcasecmp(), strnatcasecmp()
?>
htmlspecialchars($str, ENT_QUOTES, 'UTF-8')。password_hash() + password_verify()。mb_* 系列,設定 mb_internal_encoding('UTF-8')。strtr() 替代多次 str_replace(),或使用正則 preg_replace()。