如何查找URL中哪些Unicode字母看起来不错

时间:2019-05-29 09:43:53

标签: url unicode

例如:

这些字符太短或与周围的字符重叠:

/b5/ີ/foo
/31/ั/foo
/39/᤹/foo
/a3/ᮣ/foo

这些太长了,无法放入等宽字符插槽:

/4b/ോ/foo
/23/ᠣ/fo
/61/ᡡ/foo
/86/ᢆ/foo
/ba/຺/foo

然后,空格/空格/不可见字符也将被认为不适合URL。

想知道是否有一种简单的方法可以找出哪些字符属于这些插槽:

  1. URL(拉丁字符,汉字等)非常合适。
  2. 对于等号而言太大(中文字符,上述示例等)。
  3. 组合字符或与周围的URL字符重叠(上面的示例)。

也许通过检查unicode字符上的某些属性,可以通过编程方式告诉此字符,所以我不需要逐一检查每个字符并直观地检查它属于哪个类别。

主要是我正在寻找哪些字符需要(a)放置在另一个字符上(组合字符),或者(b)需要一些额外的填充,例如上面的示例,以便可以在URL中看到它们。 / p>

1 个答案:

答案 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