代码之家  ›  专栏  ›  技术社区  ›  webdeb

elixir中的转义字符串

  •  2
  • webdeb  · 技术社区  · 6 年前

    给定一个字符串 str = “\“ 然后将其渲染到JS或Python等其他程序中:

    # index.js.eex
    console.log(„<%= str %>“)
    
    # hello.py.eex
    print(„<%= str %>“)
    

    结果在 console.log(„\“)

    您看到了这个问题,反斜杠将跳出右引号,并在JS中产生语法错误

    问题是,我应该如何修复它?

    PS:我正在手机上写,所以引号不正确,我会在笔记本电脑上尽快修复它

    2 回复  |  直到 6 年前
        1
  •  3
  •   intentionally-left-nil    4 年前

    您可以在elixir中对字符串进行“javascript编码”。

    JS的规则是斜杠需要双转义。你可以自己做,或者使用 Phoenix.HTML.javascript_escape

    javascript_escape("my string with \")

    查看源代码 here 如果有兴趣

        2
  •  3
  •   Scymex    6 年前

    如果您使用的是Phoenix,您可能会发现这些很有用 https://hexdocs.pm/phoenix_html/Phoenix.HTML.html#escape_javascript/1 https://hexdocs.pm/phoenix_html/Phoenix.HTML.html#html_escape/1

    或者将其转换为JSON并跳过引号。这里有一个例子。

    # index.js.eex
    console.log(<%= raw(Jason.encode!(str)) %>)
    

    也许视图助手会更好(例如Phoenix):

    defmodule MyAppWeb.LayoutView do
      use MyAppWeb, :view
    
      def raw_json(data) do
        case Jason.encode(data) do
          {:ok, result} -> raw(result)
          {:error, _reason} -> nil # Depending on what fallback you want
        end
      end
    end