Bao gồm một SVG (được lưu trữ trên GitHub) trong MarkDown


173

Tôi biết rằng một hình ảnh có thể được đặt trong MD với cú pháp MD là ![Alt text](/path/to/img.jpg)hoặc ![Alt text](/path/to/img.jpg "Optional title"), nhưng tôi gặp khó khăn khi đặt một SVG trong MD nơi mã được lưu trữ trên GitHub.

Cuối cùng sử dụng rails3 và thay đổi mô hình thường xuyên ngay bây giờ, vì vậy tôi đang sử dụng RailRoady để tạo ra một SVG của sơ đồ lược đồ của các mô hình. Tôi muốn cho SVG đó sau đó được đặt trong ReadMe.md và được hiển thị. Khi tôi mở tệp SVG cục bộ, nó hoạt động, vậy làm cách nào để trình duyệt hiển thị SVG trong tệp MD? Cho rằng mã sẽ động cho đến khi nó được hoàn thành (dường như không bao giờ), việc lưu trữ SVG ở một nơi riêng biệt có vẻ quá mức cần thiết và tôi đang thiếu một cách tiếp cận để thực hiện điều này.

SVG tôi đang cố gắng đưa vào đây trên GitHub:https://github.com/specialorange/FDXCM/blob/master/Rails/fdxcm/doc/models_brief.svg

Tôi đã thử như sau, với một hình ảnh thực tế cũng như để xác minh cú pháp đang hoạt động, chỉ là mã SVG không được hiển thị:

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

để có được kết quả của:

Tổng quat 1 : https://github.com/specialorange/FDXCM/blob/master/Rails/fdxcm/doc/controllftimebrief.svg "Tổng quan"

Văn bản thay thế


Tài liệu Google :


1
GitHub hiện có báo cáo lỗi mở có liên quan: github.com/github/markup/issues/556
sampablokuper

Để tiết kiệm cho mọi người nhấp chuột, báo cáo lỗi trên github đã được mở vào ngày 13 tháng 10 năm 2015.
Potherca

Câu trả lời:


206

Mục đích của raw.github.comviệc cho phép người dùng xem nội dung của tệp, vì vậy đối với các tệp dựa trên văn bản, điều này có nghĩa (đối với một số loại nội dung nhất định), bạn có thể nhận được các tiêu đề sai và những thứ bị hỏng trong trình duyệt.

Khi câu hỏi này được hỏi (năm 2012), SVG không hoạt động. Kể từ đó, Github đã thực hiện nhiều cải tiến khác nhau. Bây giờ (ít nhất là đối với SVG), các tiêu đề Kiểu nội dung chính xác được gửi.

Ví dụ

Tất cả các cách được nêu dưới đây sẽ làm việc.

Tôi đã sao chép hình ảnh SVG từ câu hỏi sang repo trên github để tạo các ví dụ bên dưới

Liên kết đến các tệp bằng các đường dẫn tương đối (Hoạt động, nhưng rõ ràng chỉ có trên github.com / github.io)

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

Kết quả

Xem ví dụ làm việc trên github.com .

Liên kết đến các tệp 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">

Kết quả

Văn bản thay thế

Liên kết đến các tệp RAW bằng cách sử dụng ?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">

Kết quả

Văn bản thay thế

Liên kết đến các tệp được lưu trữ trên 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">

Kết quả

Văn bản thay thế


Một số ý kiến ​​liên quan đến những thay đổi đã xảy ra trên đường đi:

  • Github đã triển khai một tính năng giúp cho SVG có thể được sử dụng với cú pháp hình ảnh Markdown. Hình ảnh SVG sẽ được vệ sinh và hiển thị với tiêu đề HTTP chính xác. Một số thẻ (như <script>) được loại bỏ.

    Để xem SVG được khử trùng hoặc để đạt được hiệu ứng này từ những nơi khác (tức là từ các tệp đánh dấu không được lưu trữ trong repos trên http://github.com/ ) chỉ cần thêm ?sanitize=truevào URL thô của SVG.

  • Như AdamKatz đã nêu trong các bình luận, sử dụng một nguồn khác ngoài github.io có thể gây ra rủi ro bảo mật và quyền riêng tư tiềm ẩn. Xem câu trả lời của CiroSantillicâu trả lời của DavidChambers để biết thêm chi tiết.

  • Vấn đề để giải quyết vấn đề này đã được mở trên Github vào ngày 13 tháng 10 năm 2015 và đã được giải quyết vào ngày 31 tháng 8 năm 2017


Nói rõ hơn, bạn đang nói rằng hình ảnh SVG sẽ không hiển thị, đúng không?
ShreevatsaR

@ShreevatsaR Không, mọi thứ trừ hotlinking tệp raw.github.com đều hoạt động tốt. Tôi vừa đổi tên một cái gì đó trong repo github và quên cập nhật câu trả lời của tôi, phá vỡ các ví dụ. Đã sửa bây giờ.
Potherca

1
@ShreevatsaR Đúng. Github không bao giờ đề cập đến chế độ xem thô được sử dụng như một cách lưu trữ tệp, chỉ để xem, do đó nó sẽ gửi một text/plaintiêu đề.
Potherca

2
Cảnh báo: rawgit.com và rawgithub.com không được sở hữu hoặc vận hành bởi GitHub, điều này gây ra rủi ro về quyền riêng tư và thậm chí bảo mật do lạm dụng, nếu không phải từ chủ sở hữu hiện tại thì có lẽ từ chủ sở hữu tương lai nếu đăng ký DNS mất hiệu lực. Điều này làm cho giải pháp github.io an toàn nhất. Xem thêm câu trả lời của @ CiroSantilli'scâu trả lời của @ davidchambers , cả hai đều lưu ý rủi ro XSS mà điều này tạo ra.
Adam Katz

1
@MonsieurDart Tôi đã thêm mối quan tâm của bạn vào câu trả lời.
Potherca

36

Tôi đã liên lạc với GitHub để nói rằng các SVG được lưu trữ trên github.io không còn được hiển thị trong GitHub READMEs. Tôi đã nhận được trả lời này:

Chúng tôi đã phải vô hiệu hóa kết xuất hình ảnh svg trên GitHub.com do các lỗ hổng kịch bản chéo trang tiềm năng.


3
Đợi đã, điều đó xảy ra? Không biết.
Camilo Martin

Thật thú vị, mặc dù nó hiển thị trên blob show: xem câu trả lời của tôi . Vì vậy, tôi không thể hiểu tại sao không trong README.
Ciro Santilli 郝海东 冠状 病 事件

@CiroSantilli 事件 法轮功 包 blo Blob sử dụng iframe không thể thực hiện XSS như một SVG nhúng.
Petah

3
Đến đây chính xác tìm kiếm nếu điều này là có thể. Bằng chứng về khái niệm rằng điều này là có thể: jsfiddle.net/franciscop/krqea6gc
Francisco Presencia

1
Hừm, bấm vào đây để chứng kiến ​​một cuộc tấn công XSS? Đẹp.
Adam Katz

15

rawgit.com giải quyết vấn đề này độc đáo. Đối với mỗi yêu cầu, nó lấy tài liệu thích hợp từ GitHub và, đặc biệt, phục vụ nó với tiêu đề Kiểu nội dung chính xác.


Điều này thật tuyệt! Phải dán vào website? hoặc người ta có thể chỉ cần viết url động thông qua tập lệnh chẳng hạn. Tôi muốn bao gồm điều này trong đoạn văn bản TextExpander của tôi.
eonist

Bạn không cần truy cập trang web trước, @GitSyncApp. :)
davidchambers

1
Trả lời cho bản thân tôi 😄 RawGit không hoạt động cho các repos riêng: github.com/rgrove/rawgit/issues/62
MonsieurDart

7
rawgit.com sẽ biến mất. Theo trang web: "RawGit đã hết thời hạn sử dụng vào ngày 8 tháng 10 năm 2018, RawGit hiện đang trong giai đoạn hoàng hôn và sẽ sớm ngừng hoạt động. Đó là năm năm vui vẻ, nhưng tất cả mọi thứ phải kết thúc. Kho lưu trữ GitHub phục vụ nội dung thông qua RawGit trong tháng trước sẽ tiếp tục được phục vụ cho đến ít nhất là tháng 10 năm 2019. URL cho các kho lưu trữ khác không còn được phục vụ nữa. Nếu bạn hiện đang sử dụng RawGit, vui lòng ngừng sử dụng ngay khi có thể. "
jeffhale

1
Cũng từ rawgit.com thông báo hoàng hôn: ". Những gì bạn nên sử dụng thay vì các dịch vụ miễn phí sau đây cung cấp lựa chọn thay thế tuyệt vời đối với một số hoặc tất cả các chức năng của RawGit Bạn có thể thích họ thậm chí nhiều hơn RawGit jsDelivr GitHub Trang CodeSandbox unpkg"
jeffhale

8

Điều này sẽ làm việc. Liên kết với SVG của bạn bằng cách sử dụng mẫu sau:

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

Nhược điểm là mã hóa chủ sở hữu và repo trong đường dẫn, có nghĩa là svg sẽ bị hỏng nếu một trong hai được đổi tên.


Một nhược điểm khác của việc sử dụng cdn.rawgit.comlà "các tệp được lưu trữ vĩnh viễn dựa trên URL". Nó sẽ không bao giờ cập nhật nếu bạn sửa đổi tệp, trừ khi bạn thay đổi tên hoặc đường dẫn.
Mottie

@Mottie: rawgit đã cập nhật ngay bây giờ: "Những thay đổi mới mà bạn đẩy lên GitHub sẽ được phản ánh trong vòng vài phút."
eonist

Quan trọng! RawGit không hoạt động cho các repos riêng: github.com/rgrove/rawgit/issues/62
MonsieurDart

5
Cập nhật 2018. rawgit đang say nắng. Xem bình luận của tôi ở trên.
jeffhale

8

Cập nhật 2017

Một nhà phát triển GitHub hiện đang xem xét điều này: https://github.com/github/markup/issues/556#issuecomment-306103203

Cập nhật 2014-12 : GitHub hiện kết xuất SVG trên chương trình blob, vì vậy tôi không thấy bất kỳ lý do nào tại sao không hiển thị trên kết xuất README:

Cũng lưu ý rằng SVG không có nỗ lực XSS nhưng nó không chạy: https://raw.githubusercontent.com/cirosantilli/test/2144a93333be144152e8b0d4144b77b211afce63/svg.svg

Tỷ phú cười SVG khiến Firefox 44 đóng băng, nhưng Chromium 48 vẫn ổn: https://github.com/cirosantilli/web-cheat/blob/master/svg-billion-laughs.svg

Petah đã đề cập rằng các đốm màu vẫn ổn vì SVG nằm trong một iframe.

Lý do có thể có cho GitHub không phục vụ hình ảnh SVG

  • lỗ hổng XML chung. Ví dụ, việc mở một tỷ lượt cười chỉ khiến Firefox bị sập hệ thống của tôi. Lỗi Firefox có khai thác kèm theo: https://ormszilla.mozilla.org/page.cgi?id=v biểu / user.html . Tương tự trên Chromium: https://code.google.com.vn/p/chromium/issues/detail?id=231562

  • Tập lệnh SVG XSS: trong khi hầu hết các trình duyệt không chạy tập lệnh khi SVG được nhúng img, có vẻ như điều này không bắt buộc theo tiêu chuẩn, vì vậy có lẽ GitHub đang chơi an toàn.

    Các trình duyệt sẽ chạy nó nếu bạn mở SVG trực tiếp (nhưng có vẻ như GitHub không bao giờ hiển thị hình ảnh trực tiếp trên github.commiền) hoặc nếu nó là nội tuyến (hiện đang bị GitHub xóa hoàn toàn), vì vậy những trường hợp đó không phải là vấn đề bảo mật. Các liên kết có liên quan:

Các câu hỏi sau đây hỏi về các rủi ro của SVG nói chung: /security/11384/Exloits-or-other-security-risks-with-svg-upload


2
Các trình duyệt không chạy tập lệnh khi SVG được truy cập thông qua thẻ hình ảnh. Hãy tự kiểm tra.
Robert Longson

@RobertLongson Cảm ơn bạn đã sửa chữa. Là được chỉ định trên tiêu chuẩn, chỉ là một hành vi trình duyệt phổ biến? Nó được thực hiện cho an ninh?
Ciro Santilli 郝海东 冠状 病 事件

Nó được thực hiện cho sự riêng tư, và nó không thực sự trong một tiêu chuẩn. Mọi người hiểu cách hình ảnh raster hoạt động và những gì họ có thể / không thể làm như vậy khi được sử dụng làm hình ảnh hình ảnh SVG sẽ hoạt động theo cùng một cách.
Robert Longson

4

Tôi có một ví dụ hoạt động với thẻ img, nhưng hình ảnh của bạn sẽ không hiển thị. Sự khác biệt tôi thấy là loại nội dung.

Tôi đã kiểm tra hình ảnh github từ bài đăng của bạn (hình ảnh tài liệu google hoàn toàn không tải vì lỗi kết nối). Hình ảnh từ github được phân phối dưới dạng nội dung: văn bản / thuần túy, sẽ không được hiển thị dưới dạng hình ảnh bởi trình duyệt của bạn.

Giá trị loại nội dung chính xác cho svg là image / svg + xml. Vì vậy, bạn phải đảm bảo rằng các tập tin svg đặt đúng loại mime, nhưng đó là sự cố máy chủ.

Hãy thử với http://svg.tutorial.aptico.de/grafik_svg/dummy3.svg và đừng quên chỉ định chiều rộng và chiều cao trong thẻ.


1

Sử dụng trang web này: https://rawgit.com , nó hoạt động với tôi vì tôi không gặp vấn đề về quyền với tệp svg.
Xin lưu ý rằng RawGit không phải là dịch vụ của github, như được đề cập trong Câu hỏi thường gặp về Rawgit :

RawGit không được liên kết với GitHub dưới bất kỳ hình thức nào. Vui lòng không liên hệ với GitHub để yêu cầu trợ giúp với RawGit

Nhập url của svg bạn cần, chẳng hạn như:

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

Sau đó, bạn có thể lấy url dưới đây có thể được sử dụng để hiển thị:

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

2
Quan trọng! RawGit không hoạt động cho các repos riêng: github.com/rgrove/rawgit/issues/62
MonsieurDart

1

Giống như điều này làm việc cho tôi trên Github.

![Imgae Caption](ImageAddressOnGitHub.svg)

hoặc là

<img src="ImageAddressOnGitHub.svg">
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.