【问题标题】:multibyte identifiers list多字节标识符列表
【发布时间】:2011-06-15 21:13:52
【问题描述】:

我正在研究多字节字符以及它们是如何使用的,但有多少不同的标识符/修饰符用于不同的多字节。

例如:&nbps;,&#nbsp;,U+0026,%20

&,&#,u+,% 等有多少种不同的标识符?

如果输入的单词长度超过 255 个字符,则我尝试查找输入,那么它可能是多字节(黑客尝试),然后我可以检查单词是否可以拆分具有多字节标识符,然后停止黑客尝试。

【问题讨论】:

  • 搜索 HTML 实体,应该可以解释其中的大部分内容。你在哪里找到nbsp;?那不是合法的 HTML 实体。也许你的意思是 <.
  • 这完全取决于要解析字符串的引擎。我认为为此构建一个通用的“黑客检测”解决方案没有意义。
  • 抱歉,您的问题不清楚。 &amp;nbsp;&amp;#x0026 被称为 HTML/XML 实体,%20 是 URI 转义序列。什么叫多字节,你想做什么?
  • @merijn 我知道&amp;#nbsp;,但想不出这种类型的实体是如何工作的,但我仍然知道它是类似的,@benoit 好吧,我想要做的是问题让假设输入类似于hello world,您有 2 个单词,每个单词 5 个字母,但如果您有 &amp;nbps;&amp;nbps;&amp;nbps;&amp;nbps;,其中没有空格,因此它不是普通文本,而是一个特殊字符,那么我可以决定如何处理这些特殊字符。

标签: php javascript html multibyte


【解决方案1】:

% 格式 - 用于嵌入 URL 的 url 编码值,例如%20 是一个空格 (ascii 20)
&amp;nbsp; - 命名字符实体,在这种情况下是不间断空格
U+0026 - 十六进制表示法的 unicode 字符,在这种情况下是 &amp;&amp;#...; - 十进制编号字符实体 (base10) &amp;#38; = &
&amp;#x...; - 十六进制编号字符实体 (base 16): &amp;#x26; = &

【讨论】:

  • 我知道这些并且我想知道除这些之外的任何其他的:)
  • 这些是我所知道的。命名实体在 HTML 规范中(并且有很多)。 XML直接只支持大约6个。
【解决方案2】:

您是否试图避免基于homoglyph 的欺骗? identifier 在这里表示 username 吗?

如果是,并且如果您的用户使用拉丁字母,则只允许使用 ascii 字母和数字:

$identifier = preg_replace('#[^A-Za-z0-9]+#', '', $identifier);

【讨论】:

  • 标识符我的意思是%是url编码的标识符
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-20
  • 2021-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多