我怎样才能“白名单”/仅输出(英语)az;AZ;0-9;| ksh/OpenBSD 5.3 中的字符和空格?
$ 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。