Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
URL中的非ascii字符_Url_Special Characters_Non Ascii Characters - Fatal编程技术网

URL中的非ascii字符

URL中的非ascii字符,url,special-characters,non-ascii-characters,Url,Special Characters,Non Ascii Characters,我遇到了一个我以前从未见过的新问题:我的客户正在向我们构建的项目添加文件,其中一些文件名有特殊字符,因为其中一些单词是西班牙语 例如,我正在测试的一个文件中有一个字符。我在css文件中将该图像称为背景图像,但在Safari中它不会显示。但在FF和Chrome上确实如此 作为测试,我将链接粘贴到浏览器中,并且做了同样的事情。在FF和Chrome上工作,但Safari抛出错误。我想是语言角色把它扔了吧 Firefox将以下url转换为%CC%81并加载图像 -Clássico_foto-Henriq

我遇到了一个我以前从未见过的新问题:我的客户正在向我们构建的项目添加文件,其中一些文件名有特殊字符,因为其中一些单词是西班牙语

例如,我正在测试的一个文件中有一个字符。我在css文件中将该图像称为背景图像,但在Safari中它不会显示。但在FF和Chrome上确实如此

作为测试,我将链接粘贴到浏览器中,并且做了同样的事情。在FF和Chrome上工作,但Safari抛出错误。我想是语言角色把它扔了吧

Firefox将以下url转换为%CC%81并加载图像

-Clássico_foto-Henrique-Peron-470x120-1371827671.jpg

你可以看到它在上面断裂。。。但FF和Chrome将其转换为:

您还可以在此处看到这一点:

.testbox{
宽度:340px;
高度:100px;
背景:url('http://www.themediacouncil.com/test/nonascii/LA-MAR_Cebiche-Clássico_foto-Henrique-Peron-470x120-1371827671.jpg')左上方无重复;
}

那么,正确的处理方法是什么呢。我正在用PHP和WORDPRESS进行开发。我不想告诉客户返回并用特殊字符替换所有文件


感谢您的帮助。谢谢

我相信正在成为标准的是将非ascii字符转换为UTF-8字节序列,并将这些序列作为%HH十六进制代码包含在URL中。字符是U+00E1(Unicode),在UTF-8中,它使两个字节
0xC3 0xA1
。因此,
Clássico
将变成
Cl%C3%a ssico

您在Firefox中报告的转换,
Cla%CC%81ssico
,在这一点上略有不同:它将á改为a,后跟U+0301,这是组合的锐重音字符。在UTF-8中,U+0301产生
0xCC 0x81

您应该选择哪种表示形式——unicode“á”或“a后跟组合重音”——取决于web服务器需要什么来匹配正确的内容。在您的例子中,可能文件名实际上包含组合字符重音,这就是它工作的原因(很难说)


处理非ascii拉丁字符的另一种更老的方法是使用8位拉丁字符集表示(ISO-8859-1或类似的东西,如Windows-1252),并将其编码为一个字节。这将使
Clássico
变成
Cl%E1ssico
。但是,由于这只适用于拉丁字符集,并且对它们的某些字符不明确,因此它很可能会消失。

您是否建议在标题中声明它,以便浏览器自己或某种脚本转换字符?我的设置与OP(Wordress)相同,我不能说有任何具体的设置,但一般来说,我建议URL:s在出现的代码中进行编码(以html或其他形式),使用与web服务器相同的约定。如果您对web服务器使用的约定有任何影响,我建议使用UTF-8字节序列,使用%HH。在标题中声明它?不确定这是否会有任何影响,可能取决于浏览器。