加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

unix – 我可以确定终端是否解释C1控制代码?

发布时间:2020-12-15 22:55:53 所属栏目:安全 来源:网络整理
导读:ISO / IEC 2022定义了 the C0 and C1 control codes.C0集是ASCII,ISO-8859-1和UTF-8(例如ESC,CR,LF)中0x00和0x1f之间熟悉的代码. 一些VT100终端仿真器(例如屏幕(1),PuTTY)也支持C1集.这些是0x80和0x9f之间的值(例如,0x84将光标向下移动一行). 我正在显示用户
ISO / IEC 2022定义了 the C0 and C1 control codes.C0集是ASCII,ISO-8859-1和UTF-8(例如ESC,CR,LF)中0x00和0x1f之间熟悉的代码.

一些VT100终端仿真器(例如屏幕(1),PuTTY)也支持C1集.这些是0x80和0x9f之间的值(例如,0x84将光标向下移动一行).

我正在显示用户提供的输入.我不希望用户输入能够改变终端状态(例如移动光标).我目前正在过滤出C0集中的字符代码;但是我想有条件地过滤出C1集,如果终端将它们解释为控制码.

有没有办法从像termcap这样的数据库中获取这些信息?

解决方法

我能想到的唯一方法就是使用C1请求并测试返回值:

$echo `echo -en "x9bc"`
^[[?1;2c
$echo `echo -e "x9b5n"`
^[[0n
$echo `echo -e "x9b6n"`
^[[39;1R
$echo `echo -e "x9b0x" `
^[[2;1;1;112;112;1;0x

以上是:

CSI c      Primary DA; request Device Attributes
CSI 5 n    DSR; Device Status Report
CSI 6 n    CPR; Cursor Position Report
CSI 0 x    DECREQTPARM; Request Terminal Parameters

ESR维护的terminfo / termcap(link)在用户字符串7和9(user7 / u7,user9 / u9)中有几个这样的请求:

06002

例:

$echo `tput u7`
^[[39;1R
$echo `tput u9`
^[[?1;2c

当然,如果您只想防止显示损坏,可以使用较少的方法,并让用户在显示/不显示控制字符(-r和-R选项,更少)之间切换.此外,如果您知道输出字符集,则ISO-8859字符集会为控制代码保留C1范围(因此它们在该范围内没有可打印的字符).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读