POSIX文字クラスを使用するPHPの一致制御文字は空白文字ではありませんか?
[:cntrl:]を除くが[:space:]をどのように一致させるか?
$message = ereg_replace("[[:cntrl:]]", "", $message);
POSIX文字クラスを使用するPHPの一致制御文字は空白文字ではありませんか?
[:cntrl:]を除くが[:space:]をどのように一致させるか?
$message = ereg_replace("[[:cntrl:]]", "", $message);
ereg_ *(POSIX)関数は長い間廃止されています。これらの方法を使用してcontiueするべきではありません。 POSIX Bracket Expressions[:cntrl:]
によれば
はASCII範囲[\x00-\x1F\x7F]
(またはUnicode \p{Cc}
)に解決し、[:space:]
は[ \t\r\n\v\f]
に解決します。 asciitable.comを使用してこれらの文字を解決すると、除外リスト[\x20\x09-\x0D]
が残ります。 「数学をする」には[\x00-\x08\x0E-\x1F\x7F]
が残っています。 VT
(垂直タブ)とFF
(フォームフィード、新ページ)も保存されていることを
$message = preg_replace('/[\x00-\x08\x0E-\x1F\x7F]+/', '', $message);
注:。それは、以下の、PHP 5.3と上位互換性、消毒が残りますあなたも、これらを削除したい場合がありますあなたの状況に応じて:
$message = preg_replace('/[\x00-\x08\x0E-\x1F\x7F\x0A\x0C]+/', '', $message);
[[:cntrl:]]
基本的[\x00-\x1f\x7F]
と[[:space:]]
ある長手法は[\x00-\x08\x0E-\x1F\7F]
を使用することであろうように、[ \t\r\n\v\f]
(ref)と等価である(スペースは0x20にあり、CNTRL範囲外、\t\r\n\v\f
は\ x0Dに\ X09ある)
は、私は、おかげで質問を更新しました –
「安全でない文字」を定義します。 –
「エスケープ」を定義 – Howard