Elixir 长生不老药中的转义字符串

Elixir 长生不老药中的转义字符串,elixir,Elixir,给定一个字符串,如str=“\”,然后将其呈现到其他一些程序中,如JS或Python: # index.js.eex console.log(„<%= str %>“) # hello.py.eex print(„<%= str %>“) #index.js.eex 控制台日志(“”) #你好,py.eex 打印(“) 结果显示在控制台日志中(“\”) 您可以看到这个问题,反斜杠将转义结束引号,并在JS中产生语法错误 问题是,我应该如何修复它 PS:我是在手机上写的

给定一个字符串,如
str=“\”
,然后将其呈现到其他一些程序中,如JS或Python:

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

# hello.py.eex
print(„<%= str %>“)
#index.js.eex
控制台日志(“”)
#你好,py.eex
打印(“)
结果显示在控制台日志中(“\”)

您可以看到这个问题,反斜杠将转义结束引号,并在JS中产生语法错误

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

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

你可以用elixir对字符串进行“javascript编码”

JS的规则是斜杠需要双转义。你可以自己做,或者使用类似的方法

javascript\u转义(“带\”的我的字符串)


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

如果您正在使用Phoenix,您可能会发现这些代码很有用

或者将其转换为JSON并跳过引号

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

python有不同的编码规则,因此您需要不同的格式。如果您试图获取一个可以跨多种编程语言工作的字符串,最好将其视为数据(如JSON),然后将其导入到相应的代码中。该代码在最新版本中已重命名。
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