17

私はjinjaファイルにjsonオブジェクトを構築しています:

object_name = {
    property_name: "{{ _("Some Text which might have "quotes" in it")  }}"
}

そして、上記の jinja2 ファイルをスクリプト タグでインポートします。

注: _("Text") は翻訳テキストに置き換えるために使用されるため、() 内のテキストは別の言語のテキストに置き換えられるため、翻訳に二重引用符が含まれるかどうかは予測できません

着信引用符をエスケープして、たとえば "

編集済み

ソリューション:

この問題の解決策は、Python にすべての翻訳を実行させ、すべての引用をエスケープさせることでした。しかし、少なくとも英語のテキストに問題がないように常に確認する必要があり、とにかくこれを制御できます....これまでのところ:)

こちらの資料もご覧ください

http://pology.nedhodnik.net/doc/user/en_US/ch-poformat.html#sec-poescapes

4

4 に答える 4

9

Jinja2には素敵なフィルターtojsonがあります。文字列からjsonを作成すると、ダブルクォート""で囲まれた文字列が生成されます。javascript で安全に使用できます。また、自分で引用符を付ける必要はありません。

string = {{ html_string|tojson }};

あなたの特定のケースでは、Pythonでdictを作成し、それを1回使用してjavascriptオブジェクトに変換する方が簡単かもしれません

jsObject = {{ py_dict|tojson }};

tojsonまた、重要なシンボルをエスケープすることで XSS を防ぎます。jinja 2.10でテスト済み:

t = jinja2.Template('{{s|tojson}}')
r = t.render(s="</script>...")
print(t) # "\u003c/script\u003e..."
于 2018-11-18T07:29:59.693 に答える
3

質問を明確に理解していませんでした。単一のバックスラッシュでのエスケープが機能しない場合は、次を使用してバックスラッシュもエスケープします

object_name = {
    property_name: "{{ _(\\\"Some Text which might have \\\"quotes\\\" in it\\\")  }}"
}
于 2013-07-30T08:25:38.727 に答える