0

我正在构建一个从 HTML 页面中获取内容的应用程序。我遇到了一个问题:

HTML 页面中显示了一个图像,但图像 URL 指向一个 PHP 地址。当我在网络浏览器中复制并打开此地址时,浏览器无法识别其图像并显示字符串。

包含图片的页面:http: //h.acfun.tv/

图片网址: http ://wiki.acfun.tv/keyheaders/cover.php

我不熟悉服务器端脚本,我想知道他们是如何实现这一点的,以及如何从这个 PHP 地址获取正确的图像 URL?

顺便说一句,我正在制作的应用程序是一个 iOS 应用程序。

4

4 回答 4

0

URL 指向一个 JPEG 图像,但服务器响应一个像 text/html 这样的标题

Content-type: text/html

而不是

Content-type: image/jpeg

我猜是浏览器,因为 url 在img标签内,通过检查返回的数据的内容来尝试成功地确定图像类型。

如果您直接在浏览器中键入地址,它不会确定请求的内容是否为图像,而是遵循请求的内容类型“text/html”


如果您有权访问服务器代码,PHP 脚本应该告诉浏览器返回的内容是图像。这样做的方法是使用在发送任何内容之前调用的header()函数正确设置响应的标头。

header('Content-type: image/jpeg');

如果您必须在 iOS 应用程序中显示该内容,只需将接收到的数据视为 JPEG 图像。

于 2013-10-12T15:39:57.093 回答
0

该链接正在返回Content-Type text/html,因此数据可能是图像,但服务器告诉任何客户端(浏览器/您的应用程序)数据是 HTML。您要么需要更改服务器以告知有关数据类型的真相,要么从 URL 获取原始数据并以不同的方式处理它(通过尝试从中加载图像)。

于 2013-10-12T15:40:00.843 回答
0

它与Content-Type请求有关,以便浏览器知道它需要显示什么样的数据。服务 cover.php 的服务器,MIME类型设置为,text/html因此您的应用程序尝试将其显示为文本,而不是正确的图像格式。

于 2013-10-12T15:40:10.460 回答
0

该页面以实际图像响应,但是它们的 Content-Type 不正确,因此当您直接转到该页面时,您的浏览器会认为它是一些文本。将 img 标记指向该 URL 将按预期显示图像(采用 JFIF 格式)。

他们如何实现它是一个简单的例子,如下所示:

<?php
    echo file_get_contents('theImage.jfif');
?>

如果您也打算这样做,可以消除 Content-Type 问题的更好方法是包含正确的 Content-Type 标头:

<?php
    header('Content-Type: image/jfif');
    echo file_get_contents('theImage.jfif');
?>

话虽如此,除了一些非常特殊的情况外,我不建议这样做。它影响浏览器缓存图像的方式(在他们的情况下,根本不缓存),并在简单的静态文件请求就足够的情况下调用 PHP。

于 2013-10-12T15:40:55.610 回答