浏览器如何使用<img src="STRING"/>中定义的STRING加载图片文件

时间:2010-09-15 17:28:07

标签: html xml encoding browser

我有一个非常奇怪的问题:

我使用xsl来显示一个html图片,其中的源代码在xml文件中定义如下:

 <pic src="..\_images\gallery\smallPictures\2009-03-11 אפריקה ושחור לבן\020.jpg" width="150" height="120" /> 

[有趣的人物是希伯来语 - ;]]

现在出现了一个奇怪的部分:

  1. 在本地测试文件时,它适用于Firefox和Safari,但不适用于IE和Opera。 (文件:// C:/file.xml)

  2. 接下来我将文件发送给主机抛出FTP(仅此而已)

  3. 在从主机调用页面时,它突然适用于所有浏览器:(http://www.host/file.xml

  4. 问题是服务器如何以我的浏览器可以读取的方式将xml文件发送到我的浏览器,而同一浏览器无法读取本地存储的同一文件?!

    我一直认为HTML(xml)和图片都被发送到负责加载页面的客户端 - 那么为什么相同的文件对我的webhost提供程序起作用而不适合我呢?

    让它完全奇怪的是IE并不孤单 - Opera将这种奇怪的行为加入其中。

    有什么想法吗?

    非常感谢 阿萨夫

4 个答案:

答案 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 的含义,我建议您阅读以下文章:

  

<强> The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets

答案 2 :(得分:1)

..\_images\gallery\smallPictures\2009-03-11 אפריקה ושחור לבן\020.jpg

这是一个Windows文件路径,而不是有效的URI。你需要:

  • \;
  • 替换/反斜杠
  • 可能会删除..,如果您希望该文件位于根目录中;
  • 用URL编码版本替换空格(以及任何其他不符合URL的标点符号);
  • 与不正确支持IRI的浏览器兼容(并避免页面编码问题)非希伯来语等非ASCII字符必须采用UTF-8和URL编码。

你最终应该:

<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标头将指定内容类型,内容编码和其他内容。编码很可能是造成这种奇怪行为的原因。如果没有指定编码的标题信息,不同的浏览器将使用不同的方法猜测编码。

尝试右键单击浏览器中的页面和“显示页面信息”。从服务器提供内容时,内容编码应该与直接来自硬盘驱动器的内容编码不同,具体取决于您的浏览器。