Я создаю приложение, которое получает контент из HTML-страниц. Я столкнулся с проблемой:
На странице HTML отображается изображение, но URL-адрес изображения указывает на адрес PHP. Когда я копирую и открываю этот адрес в веб-браузере, браузер не может реализовать свое изображение и отображает строки вместо этого.
Страница, содержащая изображение: http://h.acfun.tv/
URL изображения: http://wiki.acfun.tv/keyheaders/cover.php
Я не знаком со сценарием на стороне сервера, интересно, как они это достигли, и как я могу получить правильный URL-адрес изображения с этого PHP-адреса?
Кстати, приложение, которое я делаю, является iOS-приложением.
Страница отвечает фактическим изображением, однако их 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, где достаточно простого статического запроса файла.
URL указывает на изображение JPEG, но сервер отвечает заголовком, например text/html.
Content-type: text/html
istead of
Content-type: image/jpeg
Я предполагаю, что браузер, поскольку URL-адрес внутри img- тега пытается успешно определить тип изображения, проверяя содержимое возвращаемых данных.
Если вы вводите адрес непосредственно в браузере, он не позаботится об определении того, является ли запрошенный контент изображением, но подчиняется типу содержимого запроса "text/html",
Если у вас есть доступ к серверному коду, скрипт PHP должен сообщить браузеру, что возвращаемый контент является изображением. Для этого нужно правильно настроить заголовок ответа с помощью функции header(), которая должна быть отправлена до отправки любого содержимого.
header('Content-type: image/jpeg');
Если вам нужно отобразить этот контент в приложении iOS, просто обработайте данные, полученные в виде изображения JPEG.
Эта ссылка возвращает Content-Type text/html
, поэтому данные могут быть изображением, но сервер сообщает любому клиенту (браузеру/вашему приложению), что данные являются HTML. Вам нужно либо изменить сервер, чтобы рассказать правду о типе данных, либо получить необработанные данные из URL-адреса и обработать его по-разному (пытаясь загрузить изображение из него).
img
нет дела до возвращаемых заголовков, он просто пытается создать изображение. Не уверен на 100%, вам нужно проверить спецификации HTML ...
Это связано с Content-Type
запроса, так что браузер знает, какие данные ему нужно отображать. Сервер, обслуживающий cover.php, тип MIME
установлен в text/html
поэтому ваше приложение пытается отобразить его как текст, а не правильный формат изображения.
Content-Type
. По крайней мере,Content-Length
тоже.