我们使用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