從PHP 字串中剝離控製字元
問題:修改正規表示式以刪除控製字元
之前有位PHP 開發者使用下面的表達式來清除字串中的STX 等控製字元:
preg_replace("/[^a-zA-Z0-9 .\-_;!:?äÄöÖüÜß<>='\"]/","",$pString)
但是,結果過於嚴格,引發了一個問題:如何選擇性地刪除控製字元?
A:利用特定字符類進行控製字符識別
為了精確定位控製字符,可以使用更特定的字符類:
preg_replace('/[\x00-\x1F\x7F]/', '', $input);
此表達式匹配ASCII 代碼在x00-x1F 和x7F 範圍內的字符,包括前32 個字符和x7F,其中包括回車符等字符。
保留換行符等基本字符
如果需要保留特定字符,例如換行符或回車符,則可以排除它們的轉義序列:
preg_replace('/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F]/', '', $input);
在此修改後的表達式中,x0A(換行符)和x0D (回車)被排除在字元類別之外。
現代語法和棄用
需要注意的是PHP 5.3.0 及其版本中ereg_replace 的棄用PHP 7.0.0 中的後續刪除要求使用preg_replace而不是ereg_replace。
最後,控製字元的字元類別
為了簡潔且可移植的替代方案,字元類別 [:cntrl:]可以就業:
preg_replace('/[[:cntrl:]]/', '', $input);
以上是如何有效地從 PHP 字串中刪除控製字元?的詳細內容。更多資訊請關注PHP中文網其他相關文章!