У меня есть несколько изображений SVG, которые я хотел бы разместить на странице. Firefox и Chrome не дали мне никаких проблем, но Safari только покажет изображение SVG, если и только если документ имеет расширение «.xhtml». Если я попытаюсь использовать PHP-код (и, следовательно, расширение «.php»), точная же разметка, которую я использовал в документе «.xhtml», больше не будет отображать изображение SVG. Проблема, конечно, я должен использовать PHP для проекта. Какие-либо предложения? Вот исходный код:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:lang="de" xmlns:xml="http://www.w3.org/XML/1998/namespace"> <head> <title>SVG Safari Test</title> </head> <body> <!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="500px" height="500px" viewBox="0 0 500 500" enable-background="new 0 0 500 500" xml:space="preserve"><circle cx="250" cy="250" r="238.048"/></svg> </body> </html>
Причина .xhtml
работает в Safari и .html
не означает, что Safari необходимо обрабатывать документ как XML, чтобы разрешить встроенный SVG. В последних версиях Firefox и Chrome используется парсер HTML5, который позволяет встроить SVG в простые HTML-документы, поэтому они должны работать с обоими.
Чтобы он правильно отображался в Safari, вам нужно установить тип содержимого в application/xhtml+xml
. Используйте это в своем PHP-файле, прежде чем выводить любой контент:
<?php header('Content-type: application/xhtml+xml'); ?>
вы можете настроить php config для обработки файлов xhtml.
В этом примере я предполагаю, что вы используете apache на debian / ubuntu
вы можете посмотреть в файле /etc/apache2/mods-enabled/php5.conf
<IfModule mod_php5.c> <FilesMatch "\.xhtml$"> SetHandler application/x-httpd-php </FilesMatch> </IfModule>
У вас может быть эта директива SetHandler в другом файле, если вы используете другой веб-сервер или дистрибутив или ОС …
предполагая, что вы находитесь в unix-окне, просто grep каталоги / etc / apache или / etc / httpd
grep -Ri sethandler /etc/apache