维基百科使用什么技术将 non-latin 个字符转换为 ID 安全?
What technique does Wikipedia use to convert non-latin characters to be ID safe?
我正在尝试 auto-generate 标题 ID,用作锚链接。因为我们不知道标题是什么语言,它应该适用于任何语言并且不会创建非法字符。
所以我正在查看维基百科,看看它是如何完成这项工作的,但无法弄清楚他们是如何做到的。例如标题Ссылки
转换为.D0.A1.D1.81.D1.8B.D0.BB.D0.BA.D0.B8
,作为标题IDDOM.
有人知道这是怎么做到的吗?
好的,我想我已经弄明白了。维基百科使用 Latin-1 编码将文本表示为每个字节的十六进制代码。以下是我为演示该过程而编写的一些 Ruby 代码:
# for arbitrary input `text`, force encode with Latin-1
encoded_text = text.force_encoding('iso-8859-1')
# Extract the string as plaintext, with literal hex escape character "/x"
plaintext_encoded_text = /\A"(.*)"\z/.match(encoded_text.inspect)[1]
# Replace "/x" with "." and spaces with "-"
output = plaintext_encoded_text.gsub('\x', '.').gsub(/\s/, '-')
此过程会将 Ссылки
转换为 .D0.A1.D1.81.D1.8B.D0.BB.D0.BA.D0.B8
,这与维基百科上出现的内容相匹配。此外,拉丁字符不受影响。
我正在尝试 auto-generate 标题 ID,用作锚链接。因为我们不知道标题是什么语言,它应该适用于任何语言并且不会创建非法字符。
所以我正在查看维基百科,看看它是如何完成这项工作的,但无法弄清楚他们是如何做到的。例如标题Ссылки
转换为.D0.A1.D1.81.D1.8B.D0.BB.D0.BA.D0.B8
,作为标题IDDOM.
有人知道这是怎么做到的吗?
好的,我想我已经弄明白了。维基百科使用 Latin-1 编码将文本表示为每个字节的十六进制代码。以下是我为演示该过程而编写的一些 Ruby 代码:
# for arbitrary input `text`, force encode with Latin-1
encoded_text = text.force_encoding('iso-8859-1')
# Extract the string as plaintext, with literal hex escape character "/x"
plaintext_encoded_text = /\A"(.*)"\z/.match(encoded_text.inspect)[1]
# Replace "/x" with "." and spaces with "-"
output = plaintext_encoded_text.gsub('\x', '.').gsub(/\s/, '-')
此过程会将 Ссылки
转换为 .D0.A1.D1.81.D1.8B.D0.BB.D0.BA.D0.B8
,这与维基百科上出现的内容相匹配。此外,拉丁字符不受影响。