首页 > 解决方案 > 如何使用Javascript将具有特殊字符的多行字符串分配给HTML textarea

问题描述

在 Flask 中,我呈现 homepage.html 并将 homepage.html 上的相同文本发回 HTML textarea textid

@app.route('/',methods = ['GET', 'POST'])
def result():
    if request.method == 'POST':
        userdata = request.form['Name']
        return render_template("homepage.html", userdata= userdata)

在 HTML 主页.html

<script>
    var fillinuserinput = function(){
        document.getElementById("textid").value = "{{ userdata }}"
   }
</script>

当 userdata(html textarea value) 是没有特殊字符的单行字符串时,它可以工作。但是,当它带有特殊字符的多行时,它会失败。

以下是userdata(html textarea值)中的前文本(文本是python代码):

#!/usr/bin/env python

导入字符串

班次 = 3

choice = raw_input("你想编码还是解码?")

下面是从 Flask 返回的用户数据:

document.getElementById("textid").value = " #!/usr/bin/env python

导入字符串

班次 = 3

choice = raw_input( 4;你想编码还是解码? 4;)

返回的数据我得到无效或意外的令牌加上我得到 "(我确实将 utf-8 放在客户端和服务器端,不确定这是否重要)

任何帮助将不胜感激。

标签: javascripthtmlflaskrender

解决方案


我对 Flask 不太熟悉,但大多数模板语言会将插值输入视为不安全的,并且会转义您提供的任何文本。如果您想避免逃避输入,请查看http://flask.pocoo.org/docs/0.12/templating/

根据该页面,有几个选项:

  1. 在 Python 代码中,将 HTML 字符串包装在标记对象中,然后再将其传递给模板。这通常是推荐的方式。
  2. 在模板中,使用 |safe 过滤器将字符串显式标记为安全 HTML ({{ myvariable|safe }})
  3. 暂时完全禁用自动转义系统。

要在模板中禁用自动转义系统,您可以使用 {% autoescape %} 块:

{% autoescape false %}
    <p>autoescaping is disabled here
    <p>{{ will_not_be_escaped }}
{% endautoescape %}

另一个相关问题是,我假设当您说您有多行输入时,它使用的是换行符。这些在 HTML 中没有意义,因此您不会在输出中看到换行符。您需要用 <br> 标签替换换行符才能真正获取它们。那,结合将字符串标记为“安全”应该可以得到你正在寻找的结果。请记住,您需要提前清理输入,然后用 <br> 标记替换换行符。


推荐阅读