例如:
这些字符太短或与周围的字符重叠:
/b5/ີ/foo
/31/ั/foo
/39/᤹/foo
/a3/ᮣ/foo
这些太长了,无法放入等宽字符插槽:
/4b/ോ/foo
/23/ᠣ/fo
/61/ᡡ/foo
/86/ᢆ/foo
/ba/຺/foo
然后,空格/空格/不可见字符也将被认为不适合URL。
想知道是否有一种简单的方法可以找出哪些字符属于这些插槽:
也许通过检查unicode字符上的某些属性,可以通过编程方式告诉此字符,所以我不需要逐一检查每个字符并直观地检查它属于哪个类别。
主要是我正在寻找哪些字符需要(a)放置在另一个字符上(组合字符),或者(b)需要一些额外的填充,例如上面的示例,以便可以在URL中看到它们。 / p>
答案 0 :(得分:0)
问题不明确。您声称后五种不合适,但是对我来说它们在一列中呈现,这正是根据Unicode中的指定方式。另请参阅:https://stackoverflow.com/a/56216985/46395
use 5.030;
use Unicode::GCString qw();
for (
"\N{WORD JOINER}", # U+2060
"\N{LATIN SMALL LETTER L}", # U+006C
"\N{CJK UNIFIED IDEOGRAPH-4E2D}", # U+4E2D
"\N{LAO VOWEL SIGN II}", # U+0EB5
"\N{THAI CHARACTER MAI HAN-AKAT}", # U+0E31
"\N{LIMBU SIGN MUKPHRENG}", # U+1939
"\N{SUNDANESE CONSONANT SIGN PANYIKU}", # U+1BA3
"\N{MALAYALAM VOWEL SIGN OO}", # U+0D4B
"\N{MONGOLIAN LETTER O}", # U+1823
"\N{MONGOLIAN LETTER SIBE U}", # U+1861
"\N{MONGOLIAN LETTER ALI GALI THREE BALUDA}", # U+1886
"\N{LAO SIGN PALI VIRAMA}", # U+0EBA
) {
say Unicode::GCString->new($_)->columns
}
__END__
0
1
2
0
0
0
0
1
1
1
1
1