在万能药中逃脱字符串

时间:2018-05-05 07:56:40

标签: elixir

给定一个类似var array1 = [{image: "some_image_url_1.png"}, {image: "some_image_url_2.png"}], array2 = [{value: "some value 1"}, {value: "some value 2"}], result = [array1, array2].reduce( (r, a) => (a.forEach((o, i) => Object.assign(r[i] = r[i] || {}, o)), r), [] ); console.log(result);的字符串,然后将其呈现给JS或Python等其他程序:

str = “\“

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

你看到反斜杠将逃避结束引用并在JS中产生语法错误的问题

问题是,我该如何解决?

PS:我在手机上写的,所以报价不正确,我会在笔记本电脑上尽快修好

2 个答案:

答案 0 :(得分:2)

如果您使用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)) %>)

也许视图助手会更好(例如凤凰城):

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

答案 1 :(得分:1)

你可以&#34; javascript编码&#34; elixir中的字符串。

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

之类的东西

escape_javascript("my string with \")

如果感兴趣,请参阅源代码here