在URI中使用变音符号的正确和官方方法是什么?
我有以下三种不同的方式:
此处á
= %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
答案 0 :(得分:3)
URL字符串中的字符必须位于7位ASCII的受限子集中,并且不为宽字符指定编码
其中一些是 无保留 ,并且可以在语法允许的任何地方使用
其余字符为 保留 ,因为它们构成了网址语法的一部分;如果保留字符在语法含义之外使用,则必须进行百分比编码
保留和非保留类别中的八位字符必须始终为百分比编码
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
由于字符被损坏,此链接无法正常工作
这是客户端和服务器之间的问题。看起来您正在发送ISO-8859-1字符,其中方案E1
和E2
对应 e acute ,而 e circumflex 。但是,如果您的服务器期望UTF-8编码,则这些编码应显示为字节序列C3 A1
和C3 A2
我无法分辨您的服务器预期的编码,但显然不是您要发送的内容。 current standard用于对UTF-8中的非ASCII字符进行编码,并对结果字节进行百分比编码
最佳解决方案是使用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