在 URI 中使用变音符号的正确且官方的方式是什么?
我有以下 3 种不同的方式:
此处
á
=%E1
、â
=%E2
、空格 =%20
,逗号 =%2C
,但此链接无法正常工作,因为字符已损坏:http://www.recordspreservation.org/cgi-bin/list_directory_1.cgi?directory=%2CBrasil%2CGoi%E1s%2CLuzi%E2nia%2CSanta%20Luzia%2CBatismos%201749-1753%2CImagens&image_name=_MG_5229.JPG
此处空格 =
%20
,逗号 =%2C
并且我不对 a 执行任何操作。此链接有效:http://www.recordspreservation.org/cgi-bin/list_directory_1.cgi?directory=%2CBrasil%2CGoiás%2CLuziânia%2CSanta%20Luzia%2CBatismos%201749-1753%2CImagens&image_name=_MG_5229.JPG
此处空格 =
+
,逗号 =%2C
并且我不对 a 执行任何操作。此链接有效:http://www.recordspreservation.org/cgi-bin/list_directory_1.cgi?directory=%2CBrasil%2CGoiás%2CLuziânia%2CSanta+Luzia%2CBatismos+1749-1753%2CImagens&image_name=_MG_5229.JPG
最佳答案
URL 字符串中的字符必须位于 7 位 ASCII 的受限子集中,并且没有为宽字符指定编码
其中一些集合是未保留的,并且可以在语法允许的任何地方使用
其余字符保留,因为它们构成 URL 语法的一部分;如果保留字符在其语法含义之外使用,则必须对其进行百分比编码
既不属于保留类别也不属于非保留类别的八位字符必须始终采用百分比编码
##非保留字符
0 to 9
A to Z
a to z
-
.
_
~
##保留字符
! - %21
# - %23
$ - %24
& - %26
' - %27
( - %28
) - %29
* - %2A
+ - %2B
, - %2C
/ - %2F
: - %3A
; - %3B
= - %3D
? - %3F
@ - %40
[ - %5B
] - %5D
This link doesn't work properly since the characters are mangled
这是客户端和服务器之间的问题。您似乎正在发送 ISO-8859-1 字符,其中方案 E1
和 E2
对应于 e eager 和 e 抑扬符。但是,如果您的服务器需要 UTF-8 编码,那么它们应该显示为字节序列 C3 A1
和 C3 A2
我无法判断您的服务器期望什么编码,但它显然不是您要发送的编码。 current standard是将非 ASCII 字符编码为 UTF-8 并对结果字节进行百分比编码
###更新
最好的解决方案是使用 URI
模块,它将根据需要对字符串进行编码
请特别注意,如果您需要在源代码中使用 UTF-8 编码的字符(如下所示),则必须在顶部添加 use utf8
你的程序。您还需要确保您的编辑器正在将 UTF-8 数据写入程序文件。
use utf8;
use strict;
use warnings 'all';
use feature 'say';
use URI;
my $url = URI->new('http://www.recordspreservation.org/cgi-bin/list_directory_1.cgi?directory=,Brasil,Goiás,Luziânia,Santa Luzia,Batismos 1749-1753,Imagens&image_name=_MG_5229.JPG');
say $url;
###输出
http://www.recordspreservation.org/cgi-bin/list_directory_1.cgi?directory=,Brasil,Goi%C3%A1s,Luzi%C3%A2nia,Santa%20Luzia,Batismos%201749-1753,Imagens&image_name=_MG_5229.JPG
关于perl - 用变音符号(带重音的字母)表示 URI 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39427982/