PHP 文字列から制御文字を削除する
Q: 制御文字を削除するための正規表現の変更
PHP 開発者は以前、文字列から STX などの制御文字を削除するために次の式を使用しました:
preg_replace("/[^a-zA-Z0-9 .\-_;!:?äÄöÖüÜß<>='\"]/","",$pString)
しかし、その結果は過度に制限的であり、制御文字を選択的に削除するにはどうすればよいのかという疑問が生じました。
A: 制御文字の識別に特定の文字クラスを利用する
制御文字を正確にターゲットにするには、より具体的な文字クラスを利用できます:
preg_replace('/[\x00-\x1F\x7F]/', '', $input);
この式は、最初の 32 文字と、改行などの文字を含む x7F を含む、x00 ~ x1F および x7F の範囲内の ASCII コードを持つ文字と一致します。
改行などの必須文字の保持
改行や復帰などの特定の文字を保持する必要がある場合、それらのエスケープ シーケンスを除外できます。
preg_replace('/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F]/', '', $input);
この変更された式では、x0A (改行) と x0D が使用されます。 (キャリッジ リターン) は文字クラスから除外されます。
最新の構文と非推奨
PHP 5.3.0 およびそのその後の PHP 7.0.0 での削除により、ereg_replace ではなく preg_replace の使用が義務付けられました。
最後に、制御文字の文字クラス
簡潔で移植可能な代替手段として、文字クラス [:cntrl:] が使用されます。採用可能:
preg_replace('/[[:cntrl:]]/', '', $input);
以上がPHP 文字列から制御文字を効果的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。