2012-03-03 15 views
6

POSIX文字クラスを使用するPHPの一致制御文字は空白文字ではありませんか?

[:cntrl:]を除くが[:space:]をどのように一致させるか?

$message = ereg_replace("[[:cntrl:]]", "", $message); 
+1

は、私は、おかげで質問を更新しました –

+1

「安全でない文字」を定義します。 –

+0

「エスケープ」を定義 – Howard

答えて

5

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); 
0

[[: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ある)

関連する問題