ksh/OpenBSD 5.3 で (英語) az;AZ;0-9;|文字とスペースのみ「ホワイトリスト」/出力するにはどうすればよいですか?
$ echo 'ASDF"`date`ew � kd A | A'
ASDF"`date`ew � kd A | A
$ echo 'ASDF"`date`ew � kd A | A' | MAGIC
ASDFdateew kd A | A
だから尋ねる:魔法が必要です:)
修正する:
echo 'a|d' | LC_ALL=EN tr -dc '[:alnum:][:space:]|'
a|d
これはコンソールで動作しますが、CGIスクリプトに入れると次のように出力されます。
a7Cd
なぜ?
答え1
echo 'áé{D`AS' | LC_ALL=C tr -cd '[:alnum:]|'
(追加の改行文字も削除されることに注意してくださいecho
。)
LC_ALL
決定したロケールこれは、どの文字が何であるか、どの文字が文字または数字と見なされるかを決定します。 Cロケールでは、文字はシングルバイトalnums
ASCII文字A〜Z、a〜z、および0〜9です。