退出并净化用户输入

退出并净化用户输入

背景

生成一本包含用户内容的书。

问题

诸如 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。)如果您需要有限的标记,这可能是可行的,但比较棘手,取决于您想要允许什么。

相关内容