在MarkDown中包含一个SVG(托pipe在github上)

我知道一个图像可以被放置在一个具有MD语法的MD上![Alt text](/path/to/img.jpg)![Alt text](/path/to/img.jpg "Optional title") ,但我很难放置在代码托pipe在Github上的MD的SVG。

最终使用rails3,并经常更改模型,所以我正在使用RailRoady生成模型的模式图的SVG。 我想要那个SVG然后被放置在ReadMe.md中,并被显示。 当我在本地打开SVG文件时,它确实起作用,那么如何让浏览器在MD文件中呈现SVG? 鉴于代码将是dynamic的,直到它最终确定(似乎从来没有),在一个单独的地方托pipeSVG似乎矫枉过正,我错过了一个方法来实现这一点。

我想包含的SVG在Github上: https://github.com/specialorange/FDXCM/blob/master/Rails/fdxcm/doc/models_brief.svghttps://github.com/specialorange/FDXCM/blob/master/Rails/fdxcm/doc/models_brief.svg

我已经尝试了下面的实际图像,以validation语法正在工作,只是没有呈现SVG代码:

 ![Overview][1] [1]: https://github.com/specialorange/FDXCM/blob/master/doc/controllers_brief.svg "Overview" <img src="https://raw.github.com/specialorange/FDXCM/master/doc/controllers_brief.svg"> ![Alt text](https://raw.github.com/specialorange/FDXCM/master/doc/controllers_brief.svg) [Google Doc](https://docs.google.com/drawings/d/1B95ajItJTAImL2WXISX0fkBLYk3nldea4Vm9eo-VyE4/edit) : <img src="https://docs.google.com/drawings/pub?id=117XsJ1kDyaY-n8AdPS3_8jTgMyITqaoT3-ah_BSc9YQ&w=960&h=720"> <img src="https://raw.github.com/specialorange/FDXCM/master/doc/controllers_brief.svg"> <img src="https://docs.google.com/drawings/d/1B95ajItJTAImL2WXISX0fkBLYk3nldea4Vm9eo-VyE4/edit"> 

得到以下结果:

Overview

替代文字

Google文件 :

raw.github.com的目的是允许用户查看文件的内容,所以对于基于文本的文件(SVG,JS,CSS等)来说,这意味着你得到了错误的头文件,并且在浏览器中出现问题。

更新: Github已经实现了一个function,使SVG可以与Markdown图像语法一起使用。 SVG图像将被清理并显示正确的HTTP标头。 某些标签(如<script> )被删除。

要查看已清理的SVG或从其他位置(例如, http: //github.com/上的非托pipe缩减文件)获得此效果,只需将?sanitize=true附加到SVG的原始URL即可。

有关呈现细节,请参阅下面的示例。

虽然你不能直接连接到raw.github.com SVG图片, raw.github.com你可以把SVG文件放在gh-pages分支上(或者把master成 Github Pages的源代码 )并链接到github.io的文件

由于您试图显示的文件似乎是您的项目文档的一部分,这可能是一个双赢的局面

如果使用Github页面不是你的事情, rawgithub.com可能是一个选项。 RawGit检索您的文件并为您设置正确的标题。

  • 正如AdamKatz在评论中指出的那样 ,使用github.io以外的来源可能会带来潜在的隐私和安全风险。 查看CiroSantilli 的答案和DavidChambers 的答案以获得更多细节。

  • 正如MonsieurDart在评论中所述,RawGit 不适用于私人回购 。

  • Github于2015年10月13日宣布解决此问题,并于2017年8月31日解决


例子

我把这个问题的SVG图像复制到github上的repo中,以创build下面的例子:

链接到相关文件(Works,但显然只有https://github.com/

 ![Alt text](./controllers_brief.svg) <img src="./controllers_brief.svg"> 

结果

请参阅github.com上的工作示例 。

链接到RAW文件(不起作用)

 ![Alt text](https://raw.github.com/potherca-blog/StackOverflow/master/question.13808020.include-an-svg-hosted-on-github-in-markdown/controllers_brief.svg) <img src="https://raw.github.com/potherca-blog/StackOverflow/master/question.13808020.include-an-svg-hosted-on-github-in-markdown/controllers_brief.svg"> 

结果

替代文字

使用?sanitize=true链接RAW文件(Works)

 ![Alt text](https://raw.github.com/potherca-blog/StackOverflow/master/question.13808020.include-an-svg-hosted-on-github-in-markdown/controllers_brief.svg?sanitize=true) <img src="https://raw.github.com/potherca-blog/StackOverflow/master/question.13808020.include-an-svg-hosted-on-github-in-markdown/controllers_brief.svg?sanitize=true"> 

结果

替代文字

链接到github.io上的文件(Works)

 ![Alt text](StackOverflow/question.13808020.include-an-svg-hosted-on-github-in-markdown/controllers_brief.svg) <img src="StackOverflow/question.13808020.include-an-svg-hosted-on-github-in-markdown/controllers_brief.svg"> 

结果

替代文字

使用rawgithub.com链接到RAW文件(也适用)

注意:有时RawGithub服务已closures/不起作用。 如果您在下面看不到图片,则可能是这种情况。

 ![Alt text](StackOverflow/question.13808020.include-an-svg-hosted-on-github-in-markdown/controllers_brief.svg) <img src="StackOverflow/question.13808020.include-an-svg-hosted-on-github-in-markdown/controllers_brief.svg"> 

结果

替代文字

我联系了GitHub,说github.io托pipe的SVG不再显示在GitHub自述文件中。 我收到了这个回复:

由于潜在的跨站点脚本漏洞,我们必须禁用GitHub.com上的svg图像呈现。

rawgit.com很好地解决了这个问题。 对于每个请求,它从GitHub中检索相应的文档,并且关键地用正确的Content-Type头来提供它。

这将工作。 使用以下模式链接到您的SVG:

https://cdn.rawgit.com/<repo-owner>/<repo>/<branch>/path/to.svg

缺点是硬编码的path中的所有者和回购,意味着svg将打破,如果其中任何一个被重命名。

2017年更新

一个GitHub开发者正在研究这个: https : //github.com/github/markup/issues/556#issuecomment-306103203

更新2014-12 :GitHub现在呈现blob显示SVG,所以我没有看到任何理由为什么不呈现在README渲染:

另外请注意,SVG确实有XSS尝试,但它不运行: https : //raw.githubusercontent.com/cirosantilli/test/2144a93333be144152e8b0d4144b77b211afce63/svg.svg

十亿笑SVG确实使Firefox 44冻结,但铬48是确定的: https : //github.com/cirosantilli/web-cheat/blob/master/svg-billion-laughs.svg

Petah提到 blob是好的,因为SVG在iframe

GitHub没有提供SVG图像的可能原因

  • 一般的XML漏洞。 例如,开放十亿次笑话使得Firefox使我的系统崩溃。 附带漏洞的Firefox漏洞: https : //bugzilla.mozilla.org/page.cgi?id = voting / user.html 。 与Chromium相同: https : //code.google.com/p/chromium/issues/detail? id = 231562

  • SVG XSS脚本:当大多数浏览器不会在SVGembeddedimg时候运行脚本,似乎这不是标准所要求的,所以也许GitHub是安全的。

    如果你直接打开SVG,浏览器会运行它(但是看起来GitHub从不直接在github.com域上显示图像),或者它是内联的(目前已经被GitHub完全删除),所以这些情况不应该是安全问题。 相关链接:

    • 规格: http : //www.w3.org/TR/SVG/script.html
    • 交互式SVG演示: http : //www.w3.org/TR/SVGhttp://img.dovov.comscript/script01.svg

以下问题一般会提到SVG的风险: https : //security.stackexchange.com/questions/11384/exploits-or-other-security-risks-with-svg-upload

使用这个网站: https : //rawgit.com ,它适用于我,因为我没有svg文件的权限问题。
请注意,RawGit不是github的服务,正如在Rawgit FAQ中提到的:

RawGit不以任何方式与GitHub关联。 请不要联系GitHub向RawGit寻求帮助

input你需要的svg的url,比如:

 https://github.com/sel-fish/redis-experiments/blob/master/dat/memDistrib-jemalloc-4.0.3.svg 

然后,你可以得到可以用来显示的url:

 https://cdn.rawgit.com/sel-fish/redis-experiments/master/dat/memDistrib-jemalloc-4.0.3.svg 

我有一个img标签的工作示例,但您的图像将不会显示。 我看到的差异是内容types。

我检查了您的文章(谷歌文档图像由于连接失败,根本不加载)的github图像。 来自github的图像以content-type:text / plainforms提供,不会被浏览器渲染为图像。

svg的正确内容types值是image / svg + xml。 所以你必须确保svg文件设置正确的MIMEtypes,但这是一个服务器问题。

试试grafik_svg/dummy3.svg ,不要忘记在标签中指定宽度和高度。