![退出并净化用户输入](https://linux22.com/image/233981/%E9%80%80%E5%87%BA%E5%B9%B6%E5%87%80%E5%8C%96%E7%94%A8%E6%88%B7%E8%BE%93%E5%85%A5.png)
背景
生成一本包含用户内容的书。
问题
诸如 Marie Curie-Sk\l{}odowska 之类的名称如果不进行转义(例如,MARIE CURIE-SKŁODOWSKA)则会导致 LaTeX 失败。
问题
- 有哪些宏可以确保字符被翻译成适合 LaTeX 的格式?
- 您如何预防类似的物品
\input{/etc/passwd}
?
谢谢你!
答案1
根据您所需的输入,只需将您的文档编码为 UTF-8 ( \usepackage[utf8]{inputenc}
) 即可允许未转义的 Unicode 字符。如果您需要比主要的拉丁语系语言更多的多样性,您应该使用 XeLaTeX(假设 Unicode 源)和包含您可能需要的尽可能多的脚本的字体(或者您需要调整输入 cgi 以选择适当的语言并将其传递给您的文档。)
您还需要决定如何处理 LaTeX 保留的字符,但这些字符可能是您允许的输入的一部分(#, %, $, _, ^, &, {, }
),可能应该转换为\#, \%
等。这可以通过 cgi 脚本中的正则表达式替换轻松完成。(尽管如果您需要允许数学输入,这会更复杂。)
至于从输入中清除危险物质,最安全的方法是不允许任何latex 标记,在这种情况下,你可以简单地从输入文本中删除所有实例\
。(显然不要用 latex 运行-shell-escape
选项运行 latex。)如果您需要有限的标记,这可能是可行的,但比较棘手,取决于您想要允许什么。