1

当我通过检查是否有任何坏字符来清洗受污染的数据时,是否有 unicode-properties 可以过滤坏字符?

4

3 回答 3

4

perlunicode 中的用户定义字符属性

package Characters::Sid_com;

sub InBad {
return <<"BAD";
0000\t10FFFF
BAD
}

sub InEvil {
return <<"EVIL";
0488
0489
EVIL
}

sub InStupid {
return <<"STUPID";
E630\tE64F
F8D0\tF8FF
STUPID
}

⋮

die 'No.' if $tring =~ /
    (?: \p{Characters::Sid_com::InBad}
      | \p{Characters::Sid_com::InEvil}
      | \p{Characters::Sid_com::InStupid}
    )
/x;
于 2011-08-31T20:12:43.643 回答
3

我认为“不”是一个轻描淡写的答案,但你有它。不,Unicode 没有“坏”或“好”字符的概念(更不用说“丑”字符了)。

于 2011-08-31T18:51:12.167 回答
2

XML(以及 XHTML)只能包含这些字符:

\x09 \x0A \x0D
\x{0020}-\x{D7FF}
\x{E000}-\x{FFFD}
\x{10000}-\x{10FFFF}

在上述情况中,应避免以下情况:

\x7F-\x84
\x86-\x9F
\x{FDD0}-\x{FDEF}
\x{1FFFE}-\x{1FFFF}
\x{2FFFE}-\x{2FFFF}
\x{3FFFE}-\x{3FFFF}
\x{4FFFE}-\x{4FFFF}
\x{5FFFE}-\x{5FFFF}
\x{6FFFE}-\x{6FFFF}
\x{7FFFE}-\x{7FFFF}
\x{8FFFE}-\x{8FFFF}
\x{9FFFE}-\x{9FFFF}
\x{AFFFE}-\x{AFFFF}
\x{BFFFE}-\x{BFFFF}
\x{CFFFE}-\x{CFFFF}
\x{DFFFE}-\x{DFFFF}
\x{EFFFE}-\x{EFFFF}
\x{FFFFE}-\x{FFFFF}
\x{10FFFE}-\x{10FFFF}

如果要生成 XHTML,则需要转义以下内容:

  • &&amp;
  • <&lt;
  • >&gt;(可选)
  • "&quot;(可选,除了用 分隔的属性值"
  • '&apos;(可选,除了用 分隔的属性值'

如果不是更宽松的要求,HTML 应该有相同的要求,所以如果你坚持这一点,你应该是安全的。

于 2011-09-01T06:58:14.260 回答