Zend Framework 1.x 的 Zend_Filter 提供統一的資料過濾介面,支援字符串大小寫轉換、HTML 實體編碼、標籤剝離等內建過濾器,並可組合成過濾鏈、實作自定義邏輯。本文通過三個完整範例,系統講解核心用法。
<?php
require_once("Zend/Loader.php");
Zend_Loader::loadClass("Zend_Filter_StringToLower");
Zend_Loader::loadClass("Zend_Filter_StringToUpper");
$filterLower = new Zend_Filter_StringToLower();
$filterUpper = new Zend_Filter_StringToUpper();
$input = 'ZHOUWUJIE zhouwujie ';
echo $filterLower->filter($input); // zhouwujie zhouwujie
echo $filterUpper->filter($input); // ZHOUWUJIE ZHOUWUJIE
<?php
require_once("Zend/Loader.php");
Zend_Loader::loadClass("Zend_Filter");
Zend_Loader::loadClass("Zend_Filter_Htmlentities");
Zend_Loader::loadClass("Zend_Filter_StripTags");
$filterChain = new Zend_Filter();
// 按加入順序依次執行
$filterChain->addFilter(new Zend_Filter_StripTags()) // 1. 剝離 HTML 標籤
->addFilter(new Zend_Filter_Htmlentities()); // 2. 特殊字符轉實體
$html = "<a href='#'>鏈接</a>";
echo $filterChain->filter($html); // 輸出:<a href='#'>鏈接</a>(標籤被剝離,< > 被轉義)
<?php
require_once("Zend/Loader.php");
Zend_Loader::loadClass("Zend_Filter_Interface");
class MyFilter implements Zend_Filter_Interface {
public function filter($value) {
$blacklist = ['黃色', '賭', '毒'];
foreach ($blacklist as $word) {
$value = str_replace($word, '*', $value);
}
return $value;
}
}
$filter = new MyFilter();
echo $filter->filter('這條信息是黃色內容') . "<br>"; // 這條信息是*色內容
echo $filter->filter('他今天去賭博了') . "<br>"; // 他今天去*博了
echo $filter->filter('他今天去吸毒了') . "<br>"; // 他今天去吸*了
| 類別/介面 | 角色 | 關鍵方法 |
|---|---|---|
| Zend_Filter_Interface | 自定義過濾器契約 | filter($value) |
| Zend_Filter | 過濾鏈容器 | addFilter(), filter() |
| Zend_Filter_StringToLower | 轉小寫 | filter() |
| Zend_Filter_StringToUpper | 轉大寫 | filter() |
| Zend_Filter_StripTags | 剝離 HTML/XML 標籤 | filter() |
| Zend_Filter_HtmlEntities | 特殊字符轉 HTML 實體 | filter() |
| Zend_Filter_Alnum | 僅保留字母數字 | filter() |
| Zend_Filter_Digits | 僅保留數字 | filter() |
addFilter 順序即執行順序。HtmlPurifyFilterChain、SafeTextFilterChain。善用 Zend_Filter 可建立清晰、可測試、可複用的資料清洗管道,是 ZF1 專案安全與健壯性的基石。