string - 最低限度的文本清理

标签 string language-agnostic text sanitization

在接受、存储、处理和显示 Unicode 文本的应用程序中(为了讨论的目的,我们假设它是一个 Web 应用程序),应该始终从中删除哪些字符传入文本?

我能想到一些,大部分列在 C0 and C1 control codes Wikipedia article 中:

  1. 范围0x00-0x19(主要是控制字符),不包括0x09(制表符)、0x0A (LF) 和 0x0D (CR)

  2. 范围0x7F-0x9F(更多控制字符)

最好知道可以安全接受的字符范围。

还有其他级别的文本过滤 - 可以规范化具有多种表示形式的字符、替换不间断字符以及删除零宽度字符 - 但我主要对基础知识感兴趣。

最佳答案

参见 W3 Unicode in XML and other markup languages笔记。它将一类字符定义为“不鼓励在标记中使用”,我肯定会在大多数网站上过滤掉这些字符。它特别包括以下字符:

  • U+2028–9 是时髦的换行符,如果您尝试在字符串文字中使用它们,它们会使 JavaScript 感到困惑;

  • U+202A–E,这是双向控制代码,狡猾的用户可以插入这些代码,以使文本在某些浏览器中看起来是向后运行的,甚至在给定 HTML 元素之外也是如此;

  • 语言覆盖控制代码也可能具有元素之外的范围;

  • Material list 。

此外,您可能希望过滤/替换在 Unicode 中根本无效的字符(U+FFFF 等),并且如果您使用的是原生支持 UTF-16 的语言(例如 Java) 、Windows 上的 Python)、任何不形成有效代理对的代理字符 (U+D800–U+DFFF)。

The range 0x00-0x19 (mostly control characters), excluding 0x09 (tab), 0x0A (LF), and 0x0D (CR)

并且可以说(特别是对于 Web 应用程序),也会丢失 CR,并将制表符变成空格。

The range 0x7F-0x9F (more control characters)

是的,远离这些,除非人们可能真的这么想。 (SO 曾经允许它们,这允许人们发布被错误解码的字符串,这有时对于诊断 Unicode 问题很有用。)对于大多数网站,我认为你不会想要它们。

关于string - 最低限度的文本清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3197639/

相关文章:

c++ - 为什么不应该派生自 C++ std 字符串类?

php - 如何找到字符串中第一个字母 [A-Za-z] 的位置?

python - 如何使用 TOR 作为代理?

algorithm - 如何在保留总和的同时将 float 舍入为整数?

css - 我需要在视频和视频右侧的文本之间添加空格

java - 正则表达式匹配 2 个或更多逗号

python - 选择值与特定字符 python 匹配的行

algorithm - 判断多用户编辑文本 "Owner"

css - 使用定位时文本变淡

text - 在远程 FTP 站点上的文件中搜索