Побег строка в эликсире - PullRequest
0 голосов
/ 05 мая 2018

Имеется строка типа str = “\“, а затем отображается ее в другой программе, например JS или Python:

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

# hello.py.eex
print(„<%= str %>“)

Результаты в console.log(„\“)

Вы видите проблему, когда обратная косая черта выходит за пределы закрывающей кавычки и выдает синтаксическую ошибку в JS

Вопрос в том, как это исправить?

PS: Я пишу это на мобильном телефоне, поэтому кавычки не верны, я исправлю это, как только я на своем ноутбуке

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Если вы используете 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
0 голосов
/ 05 мая 2018

Вы можете «закодировать javascript» в строку в эликсире.

Правила для JS таковы, что слэш должен быть экранирован дважды. Вы можете сделать это самостоятельно или использовать что-то вроде Phoenix.HTML.escape_javascript

escape_javascript("my string with \")

См. Исходный код здесь если интересно

...