使用Safari显示SVG的Doctype问题
问题描述:
我想要在页面上布局几个SVG图像。 Firefox和Chrome并没有给我带来什么问题,但是Safari似乎只在文档具有“.xhtml”扩展名的情况下显示SVG图像。如果我尝试使用PHP代码(以及“.php”扩展名),则在“.xhtml”文档中使用的完全相同的标记将不再显示SVG图像。问题当然是,我必须使用PHP作为手头的项目。有什么建议么?这里的源代码:使用Safari显示SVG的Doctype问题
<?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 parser,它允许将SVG嵌入纯HTML文档中,因此它们应该可以同时使用。
要在Safari中正确渲染,您需要将内容类型设置为application/xhtml+xml
。在输出任何内容之前,在您的PHP文件中使用它:
<?php
header('Content-type: application/xhtml+xml');
?>
答
您可以设置您的php配置来处理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
非常感谢!这工作完美。谢谢你解释它背后的原理。作为新手,我明白这一点。 – 2011-05-24 22:18:43
Jarrod,如果这个答案是正确的,你应该接受它。 – mc10 2011-05-27 21:46:10