首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 字串格式化函數完整指南:去空白、大小寫、HTML 處理、加密與常用工具

     編輯:PHP 綜合知識

核心觀念:字串不可變

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" (移除兩側數字、大寫、點號)
?>

字串填補:str_pad()

<?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"
?>

三、HTML 相關格式化 (安全輸出核心)

1. nl2br():換行轉 <br>

<?php
echo nl2br("Line 1\nLine 2\r\nLine 3");
// Line 1
// Line 2
// Line 3

2. htmlspecialchars():特殊字元實體化 (防 XSS 必用)

<?php
$str = ' & "quotes"';
echo htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
// <script>alert("XSS")</script> & "quotes"
旗標行為
ENT_COMPAT預設。雙引號實體化,單引號不處理
ENT_QUOTES雙引號、單引號皆實體化 (推薦)
ENT_NOQUOTES引號不處理
ENT_HTML5HTML5 模式 (PHP 5.4+)

3. htmlentities():所有非 ASCII 字元實體化

<?php
$str = '中文 "quote" bold';
echo htmlentities($str, ENT_QUOTES, 'UTF-8');
// 中文 "quote" <b>bold</b>

差異:htmlspecialchars 只處理 & " ' < >;htmlentities 處理所有有實體對應的字元。

4. strip_tags():移除 HTML 標籤

<?php
$str = '重要 粗體 ';
echo strip_tags($str);                    // "重要 粗體 惡意"
echo strip_tags($str, '');       // "重要 粗體 惡意" (保留 b,i,u)
?>

警告:strip_tags() 不保證 XSS 安全 (屬性、事件處理器可能殘留)。輸出到 HTML 必須搭配 htmlspecialchars()。

5. 表單資料處理組合拳

<?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;
}
?>

四、其他實用格式化函數

1. strrev():字串反轉

echo strrev('hello'); // "olleh"

2. number_format():千分位格式化

<?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" (歐洲格式)
?>

3. md5() / sha1() / hash():雜湊加密

<?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');
?>

4. 字串比較與搜尋補充

<?php
// 自然排序比較 (人類直覺)
echo strnatcmp('file2.txt', 'file10.txt'); // -1 (2 < 10)
echo strcmp('file2.txt', 'file10.txt');    // 1  (ASCII '2' > '1')

// 大小寫不敏感版本
strcasecmp(), strnatcasecmp()
?>

最佳實踐總結

  1. 輸出到 HTML:永遠用 htmlspecialchars($str, ENT_QUOTES, 'UTF-8')。
  2. 資料庫查詢:使用參數化查詢 (PDO),不要 用字串函數手動跳脫。
  3. 密碼儲存:唯一 使用 password_hash() + password_verify()。
  4. 多位元組字串:統一用 mb_* 系列,設定 mb_internal_encoding('UTF-8')。
  5. 效能:大量字串處理考慮 strtr() 替代多次 str_replace(),或使用正則 preg_replace()。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved