我們使用php構建了一個客戶端可以上傳svg graphic的界面,然後單擊該按鈕進行XSLT轉換。處理DTD被w3.org列入黑名單的好方法
接口和基礎XSLT以前工作得非常好,直到最近,xslt過程總是會失敗並返回如下錯誤:無法找到www.w3.org或者某事(記不清楚)。
我們的客戶使用Adobe Illustrator中創建SVG圖形,然後使用我們的工具進行轉換,以及SVG圖形可以直接來到Adobe Illustrator中的出了以下每個SVG文件的頂部三行:
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00
Build0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG
1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
我們做了一些研究,並得出結論w3.org將我們客戶端的服務器列入黑名單(Windows Server 2003)。正常的解決方法是做一個解析器。由於客戶只會給我們1小時左右的時間對他們的東西進行遙控,所以我在考慮是否有更簡單的方法來處理這個問題。
一個建議的方法是我們可以在客戶端服務器上放置一個flatfile.dtd文件,這樣每個傳入的SVG文件都可以引用該文件,並且我們使用php來操作SVG文件,掃描文件直到找到"<!DOCTYPE.."
字符串,然後用另一個"<!DOCTYPE.."
替換整個字符串,其中url現在指向本地flatfile.dtd,保存該文件,然後開始XSLT過程。然後在翻譯之後,我們執行相反的過程,即將dtd url從我們的本地dtd重置爲默認的w3.org之一。
明天我會試試,我們的演示是在星期五。所以我只是在這裏尋求一些建議,如果這種方法是真實的並且有任何風險?或者,任何專家能否提供一些更好的選擇來處理這個問題?
在此先感謝。
你需要加載DTD嗎?你可能只是略過。 – Wrikken 2011-03-30 23:28:15
你在使用XSLT處理什麼?我懷疑目錄是正確的答案,但並不是所有的工具都支持它們。 – 2011-03-31 08:07:42
W3C沒有專門列入黑名單 - 它拒絕了這些常用DTD的所有請求。他們根本無法應付交通。他們應該在十年前想到這一點,但他們只是認爲網絡上存在如此多的緩存以至於它不會成爲問題。我不確定您的黑客重定向到本地副本的方法比使用實體解析器「正確」執行更好。 – 2011-03-31 08:26:59