MarkDown에 SVG (GitHub에서 호스팅) 포함


173

MD ![Alt text](/path/to/img.jpg)또는 구문 중 하나를 사용하여 이미지를 MD에 배치 할 수 있다는 것을 알고 ![Alt text](/path/to/img.jpg "Optional title")있지만 코드가 GitHub에서 호스팅되는 SVG에 MD를 배치하는 데 어려움이 있습니다.

궁극적으로 rails3을 사용하고 내가 사용하고 있으므로, 지금 자주 모델을 변경 RailRoady을 모델의 스키마 다이어그램의 SVG를 생성합니다. 그 SVG를 ReadMe.md에 넣고 표시하고 싶습니다. SVG 파일을 로컬로 열면 작동하지만 어떻게 MD 파일에서 SVG를 렌더링하도록 브라우저를 가져 옵니까? 코드가 완성 될 때까지 역동적 인 것으로 가정하면 (아마도 절대로) SVG를 별도의 장소에 호스팅하는 것은 과도하게 보이며이를 달성하는 방법이 누락되었습니다.

내가 포함하는 것을 시도하고있는 SVG는 여기 GitHub의에 :https://github.com/specialorange/FDXCM/blob/master/Rails/fdxcm/doc/models_brief.svg

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">

결과를 얻으려면 :

개요 1 : https://github.com/specialorange/FDXCM/blob/master/Rails/fdxcm/doc/controllers_brief.svg "개요"

대체 텍스트


Google 문서 :


1
: GitHub의 현재 관련 열린 버그 리포트가 github.com/github/markup/issues/556
sampablokuper

사람들의 클릭을 절약하기 위해 github의 버그 보고서가 2015 년 10 월 13 일에 개설되었습니다.
Potherca

답변:


206

raw.github.com사용자가 파일의 내용을 볼 수 있도록 하는 것이 목적 이므로 텍스트 기반 파일의 경우 이는 특정 내용 유형의 경우 잘못된 헤더를 가져 와서 브라우저에서 오류가 발생하는 것을 의미합니다.

이 질문을 받았을 때 (2012 년) SVG가 작동하지 않았습니다. 그 이후 Github은 다양한 개선을 구현했습니다. 이제 (적어도 SVG의 경우) 올바른 Content-Type 헤더가 전송됩니다.

아래에 언급 된 모든 방법이 작동합니다.

아래 예를 만들기 위해 SVG 이미지를 질문 에서 github의 repo로 복사했습니다.

상대 경로를 사용하여 파일에 링크 (작동하지만 분명히 github.com / github.io에서만)

암호

![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">

결과

대체 텍스트

다음을 사용하여 RAW 파일에 연결 ?sanitize=true

암호

![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에서 호스팅되는 파일에 연결

암호

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

결과

대체 텍스트


도중에 발생한 변경 사항에 대한 의견 :

  • Github은 SVG를 Markdown 이미지 구문과 함께 사용할 수있는 기능을 구현했습니다. SVG 이미지가 삭제되고 올바른 HTTP 헤더가 표시됩니다. 와 같은 특정 태그 <script>는 제거됩니다.

    위생 처리 된 SVG를 보거나 다른 위치 (예 : http://github.com/의 repos에서 호스팅되지 않은 markdown 파일)에서이 효과를 얻으 ?sanitize=true려면 SVG의 원시 URL에 추가 하면됩니다.

  • 의견에서 AdamKatz 가 언급 한 바와 같이 github.io 이외의 소스를 사용하면 개인 정보 보호 및 보안 위험이 발생할 수 있습니다. 자세한 내용은 CiroSantilli 의 답변DavidChambers 의 답변 을 참조하십시오.

  • 이 문제를 해결하는 문제 는 2015 년 10 월 13 일 Github에서 시작되어 2017 년 8 월 31 일에 해결되었습니다.


분명히 말하면 SVG 이미지 렌더링 되지 않는다고 말하는 입니까?
ShreevatsaR

@ShreevatsaR 아니요, raw.github.com 파일을 핫 링크하는 것 외에는 모든 것이 잘 작동합니다. 방금 github 리포지토리에서 이름을 바꾸고 예제를 깨는 대답을 업데이트하는 것을 잊었습니다. 지금 수정했습니다.
Potherca

1
@ShreevatsaR 맞습니다. Github는 파일을 호스팅하는 방법으로 사용하기 위해 원시 뷰를 작성하지 않고 단지보기 전용이므로 text/plain헤더를 보냅니다 .
Potherca

2
경고 : rawgit.com 및 rawgithub.com가되어 있지 소유하거나 소개하고 개인 정보 보호, 심지어 보안이 DNS 등록이 경과하면 미래의 소유자로부터 아마도 현재 소유자로부터하지 않을 경우, 남용에서 위험 GitHub의에 의해 운영. github.io 솔루션이 가장 안전합니다. 참조 CiroSantilli의 대답 @davidchambers의 대답 @ 모두 참고 XSS의 위험이 (가) 작성하는 것이다.
Adam Katz

1
@MonsieurDart 나는 당신의 관심을 답변에 추가했습니다.
Potherca

36

GitHub에 연락하여 github.io 호스팅 SVG가 더 이상 GitHub README에 표시되지 않는다고 말했습니다. 이 답장을 받았습니다.

교차 사이트 스크립팅 취약점으로 인해 GitHub.com에서 svg 이미지 렌더링을 비활성화해야했습니다.


3
잠깐만 요? 몰랐다.
Camilo Martin

흥미롭게도 그것은 blob show에서 렌더링됩니다 : 내 대답을 참조하십시오 . README에없는 이유를 이해할 수 없습니다.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Blob은 내장 된 SVG 캔처럼 XSS를 수행 할 수없는 iframe을 사용합니다.
Petah

3
이것이 가능했는지 정확하게 검색했습니다. 이것이 가능하다는 개념 증명 : jsfiddle.net/franciscop/krqea6gc
Francisco Presencia

1
흠, XSS 공격을 목격하려면 여기를 클릭 하시겠습니까? 좋은.
Adam Katz

15

rawgit.com 은이 문제를 잘 해결합니다. 각 요청에 대해 GitHub에서 적절한 문서를 검색하고 결정적으로 올바른 Content-Type 헤더와 함께 제공합니다.


대단해! 웹 사이트에 붙여 넣어야합니까? 또는 스크립트를 통해 URL을 동적으로 작성할 수 있습니다. TextExpander 스 니펫에 이것을 포함하고 싶습니다.
eonist

먼저 @GitSyncApp 웹 사이트를 방문하지 않아도됩니다. :)
davidchambers

1
자신에게 응답 ... 😄 RawGit 개인의 repos에없는 작업을 수행합니다 github.com/rgrove/rawgit/issues/62
MonsieurDart

7
rawgit.com이 사라집니다. 웹 사이트에 따르면 : "RawGit의 유효 수명이 끝났습니다. 2018 년 10 월 8 일 RawGit은 이제 일몰 단계에 있으며 곧 종료 될 것입니다. 5 년 동안 재미 있었지만 모든 것이 끝나야합니다. 콘텐츠를 제공하는 GitHub 리포지토리 지난 달에 RawGit을 통해 2019 년 10 월까지 계속 제공됩니다. 다른 리포지토리의 URL은 더 이상 제공되지 않습니다. 현재 RawGit을 사용중인 경우 최대한 빨리 사용을 중지하십시오. "
jeffhale

1
또한 rawgit.com 일몰 ​​발표에서 : "대신 사용해야하는 것 다음 무료 서비스는 RawGit 기능의 일부 또는 전부에 대한 환상적인 대안을 제공합니다. RawGit보다 더 많은 것을 원할 수도 있습니다. jsDelivr GitHub 페이지 CodeSandbox unpkg"
jeffhale

8

작동합니다. 다음 패턴을 사용하여 SVG에 연결하십시오.

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

단점은 소유자를 하드 코딩하고 경로에 repo를 저장하는 것입니다. 즉, svg 중 하나의 이름이 바뀌면 svg가 중단됩니다.


사용의 또 다른 단점은 cdn.rawgit.com"파일이 URL을 기반으로 영구적으로 캐시된다"는 것입니다. 이름이나 경로를 변경하지 않으면 파일을 수정해도 업데이트되지 않습니다.
Mottie

@Mottie : rawgit의 업데이트 : "GitHub에 적용한 새로운 변경 사항은 몇 분 내에 반영됩니다."
eonist

중대한! RawGit은 비공개 리포지토리에서 작동하지 않습니다 : github.com/rgrove/rawgit/issues/62
MonsieurDart

5
rawgit이 일몰되고 있습니다. 위의 내 의견을 참조하십시오.
jeffhale

8

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가 10 억 건의 웃음으로 Firefox 44 Freeze를 만들지 만 Chromium 48은 괜찮습니다 : https://github.com/cirosantilli/web-cheat/blob/master/svg-billion-laughs.svg

페타 언급 는 SVG가 내부에 있기 때문에 얼룩이 iframe좋습니다.

SVG 이미지를 제공하지 않는 GitHub의 이론적 근거

다음 질문은 일반적으로 SVG의 위험에 대해 묻습니다. /security/11384/exploits-or-other-security-risks-with-svg-upload


2
이미지 태그를 통해 SVG에 액세스 할 때 브라우저는 스크립트를 실행하지 않습니다. 자유롭게 확인하십시오.
Robert Longson

@RobertLongson 수정 해 주셔서 감사합니다. 일반적인 브라우저 동작으로 표준에 지정되어 있습니까? 보안을 위해 이루어 졌습니까?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

개인 정보 보호를 위해 수행되었으며 실제로 표준이 아닙니다. 사람들은 래스터 이미지의 작동 방식과 이미지 SVG 이미지와 동일한 방식으로 작동 할 때 수행 할 수있는 작업과 수행 할 수없는 작업을 이해합니다.
Robert Longson

4

img-tag에 대한 실제 예제가 있지만 이미지가 표시되지 않습니다. 내가 보는 차이점은 내용 유형입니다.

게시물에서 github 이미지를 확인했습니다 (연결 오류로 인해 Google 문서 이미지가 전혀로드되지 않습니다). github의 이미지는 content-type : text / plain으로 제공되며 브라우저에서 이미지로 렌더링되지 않습니다.

svg의 올바른 컨텐츠 유형 값은 image / svg + xml입니다. 따라서 svg 파일이 올바른 MIME 유형을 설정했는지 확인해야하지만 서버 문제입니다.

http://svg.tutorial.aptico.de/grafik_svg/dummy3.svg를 사용 하여 시도 하고 태그에 너비와 높이를 지정하는 것을 잊지 마십시오.


1

이 사이트를 사용하십시오 : https://rawgit.com svg 파일에 권한 문제가 없으므로 저에게 효과적입니다. Rawgit FAQ
에서 언급했듯이 RawGit 은 github의 서비스가 아닙니다 .

RawGit은 GitHub와 관련이 없습니다. RawGit에 대한 도움을 요청하는 GitHub에 연락하지 마십시오

다음과 같이 필요한 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

2
중대한! RawGit은 비공개 repos에서 작동하지 않습니다 : github.com/rgrove/rawgit/issues/62
MonsieurDart

1

이것이 Github에서 나를 위해 일한 것처럼.

![Imgae Caption](ImageAddressOnGitHub.svg)

또는

<img src="ImageAddressOnGitHub.svg">
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.