2011-05-24 88 views
1

我想要在頁面上佈局幾個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> 

回答

9

原因.xhtml作品在Safari和.html不會是Safari瀏覽器所需要的文件當作XML允許嵌入SVG。 Firefox和Chrome的最新版本使用HTML5 parser,它允許將SVG嵌入純HTML文檔中,因此它們應該可以同時使用。

要在Safari中正確渲染,您需要將內容類型設置爲application/xhtml+xml。在輸出任何內容之前,在您的PHP文件中使用它:

<?php 
header('Content-type: application/xhtml+xml'); 
?> 
+0

非常感謝!這工作完美。謝謝你解釋它背後的原理。作爲新手,我明白這一點。 – 2011-05-24 22:18:43

+0

Jarrod,如果這個答案是正確的,你應該接受它。 – mc10 2011-05-27 21:46:10

0

您可以設置您的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