我有一个非常奇怪的问题:
我使用xsl来显示一个html图片,其中的源代码在xml文件中定义如下:
<pic src="..\_images\gallery\smallPictures\2009-03-11 אפריקה ושחור לבן\020.jpg" width="150" height="120" />
[有趣的人物是希伯来语 - ;]]
现在出现了一个奇怪的部分:
在本地测试文件时,它适用于Firefox和Safari,但不适用于IE和Opera。 (文件:// C:/file.xml)
接下来我将文件发送给主机抛出FTP(仅此而已)
在从主机调用页面时,它突然适用于所有浏览器:(http://www.host/file.xml)
问题是服务器如何以我的浏览器可以读取的方式将xml文件发送到我的浏览器,而同一浏览器无法读取本地存储的同一文件?!
我一直认为HTML(xml)和图片都被发送到负责加载页面的客户端 - 那么为什么相同的文件对我的webhost提供程序起作用而不适合我呢?
让它完全奇怪的是IE并不孤单 - Opera将这种奇怪的行为加入其中。
有什么想法吗?
非常感谢 阿萨夫
答案 0 :(得分:2)
在本地打开文件时,没有服务器可以提供HTTP标头。至少这是一个很大的不同。尝试检查浏览器认为页面所在的编码,何时从光盘手动打开,以及通过HTTP提供。
如果您的脚本或服务器正确设置了标头,那么这可能是原因。
答案 1 :(得分:1)
这很可能是编码问题。尝试在生成的HTML页面中明确指定编码,方法是在页面的头部包含以下META元素(假设您的XSLT设置为生成UTF-8):
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
...
</head>
...
这告诉浏览器在呈现页面时使用UTF-8编码(您实际上可以看到Internet Explorer的页面 - &gt;编码菜单中使用的编码)。
当您的Web服务器提供页面时,这种方法起作用的原因是Web服务器已经告诉浏览器已经在其中一个HTTP标头中对响应进行了哪些编码。
要基本了解 encoding 的含义,我建议您阅读以下文章:
答案 2 :(得分:1)
..\_images\gallery\smallPictures\2009-03-11 אפריקה ושחור לבן\020.jpg
这是一个Windows文件路径,而不是有效的URI。你需要:
\
; /
反斜杠
..
,如果您希望该文件位于根目录中; 你最终应该:
<img src="_images/gallery/smallPictures/2009-03-11%20020/%D7%90%D7%A4%D7%A8%D7%99%D7%A7%D7%94%20%D7%95%D7%A9%D7%97%D7%95%D7%A8%20%D7%9C%D7%91%D7%9F%10.jpg"/>
没有实际的方法可以将文件路径转换为仅在XSLT中的URI。您需要在服务器上使用某种脚本语言,例如在Python中使用nturl2path.pathname2url()
。
通常最好将URL格式的文件引用保存在XML源代码中。
答案 3 :(得分:0)
@Asaf,我相信@Svend是对的。 HTTP标头将指定内容类型,内容编码和其他内容。编码很可能是造成这种奇怪行为的原因。如果没有指定编码的标题信息,不同的浏览器将使用不同的方法猜测编码。
尝试右键单击浏览器中的页面和“显示页面信息”。从服务器提供内容时,内容编码应该与直接来自硬盘驱动器的内容编码不同,具体取决于您的浏览器。