将 \n 和其他原始字符传递到 html 输入字段

Pass \n and other raw characters into html input field

我正在编写一个允许用户为批处理作业指定参数的 Flask 应用程序 - 我希望用户提供的参数之一是定界符 - 用于 csv 文件,或作为行尾终止符对于文本文件。

我有一个 json 文档,其中包含给定作业的默认值,我使用这些来预填充用户可以选择编辑的一系列表单输入元素。

我遇到的问题是,当默认参数是制表符或换行符时,它们在我的 json 中分别表示为 \t\n - 但是将这些值注入时我的 html 页面构建代码,它们分别被解释为实际的制表符或换行符。

data_content_template = """<label for="{pipe}_{e}_{dsk}">{dsk}:</label><br>
           <input type="text" id="{pipe}_{e}_{dsk}" name="{pipe}_{e}_{dsk}" value="{dse}"><br>"""

form_contents=[]
for e,dsi in enumerate(content.get("data_source",[])):
    for dk,de in dsi.items():
        form_contents.append(data_content_template.format(pipe=escape(content.get("pipe")),
                                                          e=e,
                                                          dsk=escape(dk),
                                                          dse=escape(de)))

在这里,我使用 flask.escape 尝试将这些值强制输入到它们的文本框中,而不将它们转换为白色-space。但是当我查看 html 来源时,它是这样的:

<input type="text" id="ref_data_0_newline" name="ref_data_0_newline" value="
"><br>

如何以原始的、未更改的形式传递 \n,以便它显示一个反斜杠后跟一个 n?

你能用 double-backslash 将 '\n' 的字符串替换为 '\\n' 吗?如果这不起作用,您可以尝试将 '\n' 编码为 '\n'。

您也可以尝试将换行符直接编码为“ ”。

您可以将类似下面的 JS 示例的内容重写为 python,以将不在白名单中的任何特殊字符转换为其实体代码。我下面的例子转换 进入
但您可以删除或注释掉该行,具体取决于您是否希望换行符在 html.

中显示为换行符
/**
 * Turn all chars not in w (whitelist) into their html-friendly character codes. Converts line-breaks to br.
 *
 * @param {string} text The text to escape.
 * @return The escaped text.
 * @customfunction
 */
function escapeText_html (text){
  var s ="", w="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,.!?;-$%# ";
  for(i=0; i<text.length; i++){
    c = text.substring(i, i+1);
    if(w.indexOf(c) != -1 ){
      s += c;
    }else{
      s += "&#" + c.charCodeAt(0) + ";";
    }
  }
  s=replaceAll(s, "&#10;", "<br />");
  return s;  
}

你想要烧瓶safe过滤器...escape与你需要的相反

{{ form_content | safe }}

然后它应该呈现 html