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

用 PHP 與 Access 打造聊天室(十):通用函式庫 func.php 詳解

     編輯:PHP 相關知識

在聊天室專案中,func.php 集中了多個實用的輔助函式,涵蓋隨機數產生、字串搜尋計數、字串重複、特殊字元轉義與 HTML 標籤過濾。本文逐一解析這些函式的實作細節與潛在問題。

隨機數產生器 suiji()

函式接受最大值 $max,利用 microtime() 做種子,呼叫 rand() 產生隨機數,再按比例縮放至 0 ~ $max-1 區間,最後以 round() 四捨五入回傳整數。

function suiji($max) {
    srand((double)microtime() * 1000000);
    $x = rand();
    $y = getrandmax();
    $r = $x / $y * ($max - 1);
    $r = round($r++);
    return $r;
}

注意: PHP 4.2 版後已自動播種,srand() 不再必要;且 $r++ 在 round() 之後執行,回傳值實為四捨五入前的值,邏輯有誤,建議改用 mt_rand(0, $max-1)。

字串出現次數計算 StrOccurs()

意圖計算 $sFind 在 $sStr 中出現的次數,但實作邏輯錯誤:while(true) 迴圈內若找到子字串即 break,否則嘗試用 instr()(PHP 無此函式,應為 substr())切割字串並遞增計數,導致永遠只會回傳 0 或陷入無限迴圈。正確寫法應使用 substr_count() 或迴圈搭配 strpos()。

字串重複 StrDupl()

簡單實作:將 $sStr 重複 $iCnt 次並串接回傳。可直接使用內建 str_repeat() 取代。

特殊字元轉義 DelQuot()

將 |(chr(124))、單引號(chr(39))、雙引號(chr(34))分別替換為 HTML 實體 ¦、´、"。但回傳變數寫成 return s; 缺少 $ 符號,會導致錯誤。此外,´ 非標準單引號實體,建議統一用 ' 或 '。

HTML 標籤過濾 DelTag()

嘗試檢測字串是否包含 <TABLE>、<SCRIPT>、<BODY> 等標籤(不分大小寫),但邏輯混亂:$bNeed 初始為 "False",後續判斷條件 $bNeed != "True" || !strstr(...) 恆為真,導致 $bNeed 永遠被設為 "True",且函式缺少回傳值。若需過濾 HTML 標籤,建議使用 strip_tags() 或 htmlspecialchars()。

總結與重構建議

  • 移除重複造輪子的函式,善用 PHP 內建函式(mt_rand、substr_count、str_repeat、htmlspecialchars、strip_tags)。
  • 修正語法錯誤(變數漏寫 $、不存在的函式 instr)。
  • 加入型別宣告與回傳型別(PHP 7+),提升程式碼可維護性。
  • 將函式集中於獨立類別或命名空間,避免全域命名衝突。

這些早期 PHP 專案常見的「自寫工具函式」雖具學習價值,但在現代開發中應優先採用標準庫與成熟套件,確保安全與效能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved