【问题标题】:Correct way to escape SVG in `data:` URIs?在“数据:”URI 中转义 SVG 的正确方法?
【发布时间】:2017-06-15 14:51:39
【问题描述】:

Chrome 最近启动了blocking URLs with new line and < characters

我维护的应用程序严重依赖数据 URI (data:image/svg+xml;utf8,<svg>......) 中的 SVG 图像。使用 data: URI 而不是传统的图像或 SVG 标记的原因是 SVG 是在运行时从较大的 JSON 文档中的 SVG 属性加载的。

在 Chrome 60 中进行此更改后,是否可以在 data: URL 中使用 SVG?如果没有,我有什么替代方案?

更新:用户 Álvaro González 建议使用 encodeURIComponent,这确实可以消除弃用警告。

【问题讨论】:

  • 我会告诉你需要encodeURIComponent() 作为 URL 本身加上 HTML 转义,如果你在 HTML 中插入它,但我还没有真正尝试过。
  • Álvaro González:这似乎消除了弃用警告。谢谢你。如果您回答此问题,我会将您的答案标记为正确。

标签: javascript google-chrome svg


【解决方案1】:

数据 URI 仍然是一个 URI,所以 encodeURIComponent() 应该是正确的工具:

encodeURIComponent() 函数编码统一资源 Identifier (URI) 组件通过替换某些实例的每个实例 由一个、两个、三个或四个转义序列表示的字符 字符的 UTF-8 编码(只会是四个转义 由两个“代理”字符组成的字符序列)。

不要忘记将其应用于图像数据,而不是整个 URI。

如果在 CSS 中使用 URI,这就是您所需要的。如果你想在 HTML 中注入它,你还应该在上面应用 HTML 编码(这次是完整的 URI)。

【讨论】:

    【解决方案2】:

    encodeURIComponent() 完成了这项工作,但逃脱的次数超出了它的需要。这是一篇博客文章,详细介绍了似乎最有效的方法,例如最小化转义序列和修复使用双引号等问题,而单引号会更有效:

    https://codepen.io/tigt/post/optimizing-svgs-in-data-uris

    它包括一个为 CSS 编码 SVG 的工具,可以在本地或在线使用。这是另一个在线工具:

    https://yoksel.github.io/url-encoder/

    【讨论】:

      猜你喜欢
      • 2014-02-17
      • 2016-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      相关资源
      最近更新 更多