近期網站常遭遇一類狡猾的垃圾評論:大段英文夾雜一兩個生僻漢字,因包含中文字符且無敏感詞,輕易繞過常規過濾機制。針對此類「偽中文」評論,可透過計算中文字符佔總字符的比率來識別攔截。本文將詳細介紹基於 PHP 實現的檢測邏輯與代碼實踐。
PHP 中 strlen() 與 mb_strlen() 對中文長度的計算差異是關鍵:
strlen():按字節計算,UTF-8 編碼下單個漢字佔 3 字節。mb_strlen():按字符計算,單個漢字長度為 1。同一字符串經兩函數處理,長度之差即為中文字符字節數的 2 倍(因 3-1=2)。除以 2 得到實際漢字數,再除以總字符數(mb_strlen 結果),即得中文佔比。
<?php
$len_all = strlen($comment['text']);
$len_st = mb_strlen($comment['text'], 'UTF-8');
// 中文佔比低於 50% 判定為垃圾評論
if (($len_all - $len_st) / (2 * $len_st) < 0.5) {
$error = "中文字符少於百分之五十";
}
?>
若評論包含代碼片段,會導致中文比率偏低產生誤判。建議先過濾代碼標籤(如 <code>、<pre>)後再進行比率計算,提升準確度。
此方法簡單高效,能有效攔截「掛羊頭賣狗肉」的垃圾評論,但需輔以代碼過濾等預處理以降低誤判率。實際部署時可根據業務場景調整閾值(如 40%~60%)。