gpt4 book ai didi

escaping - 如何替换给定字符串中的任何转义字符(例如垂直制表符)

转载 作者:行者123 更新时间:2023-12-04 18:18:49 26 4
gpt4 key购买 nike

我必须处理某些可能包含转义字符的文件,例如垂直制表符(又名“^k”),这确实与 REPL(SBCL)和某些库(例如 cxml-stp)混淆。

是否有涵盖 CL 中这些字符的引用,我该如何过滤它们?我刚刚找到了一些 emacs-lisp reference ,但据我所知,大多数情况下这些对普通的 lisp 并不适用。

最佳答案

(defun sanitize (string)
(remove-if
#'(lambda (x)
(and (< x 32)
(not (or (= x 13) (= x 10)))))
string))

(with-output-to-string (s)
(let ((sanitized
(sanitize
(do ((a (make-array 100 :element-type '(unsigned-byte 8)))
(i 0 (1+ i)))
(nil)
(when (= i (length a))
(return a))
(setf (aref a i) (random 64))))))
(dotimes (i (length sanitized))
(princ (code-char (aref sanitized i)) s))))

但这可能取决于您的来源/您想要包含哪些字符。这适用于 ASCII - 如果您保证它们采用 (mod 128) 格式。 Unicode 是一个复杂得多的问题。但是,这仍然会过滤掉可能在 shell 脚本中具有特殊含义的字符,但这对于以 UTF-8 等格式构建 Unicode 字符串不是一个好主意,因为如果您的源以字节形式出现,您将需要解析它并确保它们形成有效的 UTF-whatever 格式。您还需要注意 Unicode 中可能的替代(冗余)表示,由变音符号与字母组合形成的对。代码点范围内的空白区域等等......

说实话,我还没有见过 100% 符合 Unicode 实现的 Lisp。它比听起来更难,而且你可能只需要它的一个子集。

如果您想要实际案例,而这对 Unicode 字符串来说不是一个好主意 - 谷歌搜索“目录攻击”和 IIS5 漏洞。

关于escaping - 如何替换给定字符串中的任何转义字符(例如垂直制表符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11158695/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com