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

PHP 字符串處理函數進階(三):crc32、crypt、explode、fprintf 與 hebrev 實戰

     編輯:PHP 相關知識

PHP 字符串處理核心函數深度解析(第三部分)

本文詳細講解 crc32、crypt、explode、fprintf、hebrev 五個函數的語法、參數、返回值、編碼陷阱與實戰場景。

1. crc32() —— 循環冗余校驗

$str = 'Hello world!';
echo crc32($str);              // 有符號整數,可能為負
printf('%u', crc32($str));     // 無符號輸出(推薦)
sprintf('%u', crc32($str));    // 獲取字串
  • 用途:檢測資料完整性(檔案傳輸、緩存鍵生成、差異比對)。
  • 注意:PHP 整數為有符號,必須用 %u 格式化 獲取標準 32 位無符號值。
  • 不適用於加密(可逆、碰撞率高),嚴禁作為密碼雜湊。

2. crypt() —— 單向加密(歷史函數)

// 現代專案請改用 password_hash() / password_verify()
$hash = password_hash('secret', PASSWORD_DEFAULT); // bcrypt/argon2
if (password_verify('secret', $hash)) { /* 通過 */ }
  • crypt() 行為依賴作業系統、salt 格式,已不推薦直接使用。
  • PHP 5.5+ 提供 password_hash()、password_verify()、password_needs_rehash() 高層 API,自動處理 salt、算法升級、時序安全比對。
  • 常量 CRYPT_BLOWFISH、CRYPT_SHA512 等僅指示系統支援度。

3. explode() —— 字串分割為陣列

$str = "a,b,c,d";
$arr = explode(',', $str);           // ['a','b','c','d']
$arr = explode(',', $str, 2);        // 限制 2 段:['a', 'b,c,d']
$arr = explode(',', $str, -1);       // 負數:排除最後 1 段(PHP 5.1+)
  • separator 不能為空字串,否則返回 false。
  • 若 separator 不存在於字串,返回含原字串的單元素陣列。
  • 對應函數:implode()(陣列合併為字串)、preg_split()(正則分割)。

4. fprintf() —— 格式化寫入流

$fp = fopen('log.txt', 'a');
fprintf($fp, "[%s] User %d logged in from %s\n", date('c'), $uid, $ip);
fclose($fp);
  • 格式字串支援 %d、%s、%f、%x、%e 等,語法同 sprintf。
  • 參數過少時可用佔位符 %1\$s 重複使用同一參數。
  • 返回寫入的字元數。
  • 常用流:STDOUT、STDERR、檔案指標、php://memory、php://temp。

5. hebrev() —— 希伯來文 RTL 轉 LTR

$hebrew = 'שלום עולם';
echo hebrev($hebrew); // 視覺順序輸出
  • 僅影響 ASCII 224-251 範圍字符與標點。
  • 現代專案極少用到,Unicode 時代建議用 CSS direction: rtl 或 unicode-bidi 處理雙向文本。

綜合實戰:日誌寫入工具

function writeLog(string $level, string $message, array $context = []): void {
    $fp = fopen('app.log', 'a');
    $line = sprintf(
        "[%s] %s: %s %s\n",
        date('c'),
        strtoupper($level),
        $message,
        $context ? json_encode($context, JSON_UNESCAPED_UNICODE) : ''
    );
    fwrite($fp, $line);
    fclose($fp);
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved