繁体   English   中英

如何使用Javascript将带有特殊字符的多行字符串分配给HTML textarea

[英]How to assign multiline string with special characters to HTML textarea with Javascript

在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 homepage.html中

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

当userdata(html textarea值)是单行字符串且没有特殊字符时,它将起作用。 但是,当它的多行带有特殊字符时,它将失败。

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

#!/ usr / bin / env python

导入字符串

平移= 3

choice = raw_input(“您想编码还是解码?”)

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

document.getElementById(“ textid”)。value =“#!/ usr / bin / env python

导入字符串

平移= 3

选择= raw_input(&#3 4;您要编码还是解码?&#3 4;)

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

任何帮助将不胜感激。

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

根据该页面,有一些选项:

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM