如何在Flask中传递值并完整保留所有换行与空格?
解决Flask跳转时文本空格与换行丢失的问题
问题核心
直接拼接URL参数时未做URL编码,导致浏览器自动合并连续空格,同时手动替换换行的操作多余且易出问题。
解决方案
1. 修改前端JS代码,使用URL编码传递参数
去掉手动替换换行的逻辑,用encodeURIComponent()对文本参数进行完整编码,确保所有特殊字符(空格、换行、制表符等)都能被正确传递:
let confirmUri = "{{ url_for('confirm_page') }}"; let str = editor.getValue(); // 用模板字符串拼接URL,同时编码text参数 window.location.href = `${confirmUri}?authorization=supersecretcode&text=${encodeURIComponent(str)}`;
2. Flask后端直接解码获取原始文本
Flask的request.args会自动解码URL编码后的参数,无需手动处理换行符:
from flask import Flask, request, render_template app = Flask(__name__) @app.route('/confirm_page') def confirm_page(): # 权限验证 auth_code = request.args.get('authorization') if auth_code != 'supersecretcode': return "权限不足", 403 # 直接获取解码后的原始文本 input_text = request.args.get('text', '') # 传递给模板渲染 return render_template('confirm.html', text=input_text)
3. 模板中正确显示格式
要在页面上保留原始的空格和换行,必须使用<pre>标签,或者给元素添加white-space: pre-wrap;的CSS样式:
<!-- 方式1:用pre标签强制保留格式 --> <pre>{{ text }}</pre> <!-- 方式2:用div配合CSS,支持自动换行同时保留空格 --> <div style="white-space: pre-wrap; word-wrap: break-word;">{{ text }}</div>
为什么之前的方法会丢失空格?
之前的代码直接拼接未编码的文本到URL中,浏览器会将连续的空格自动合并为一个,同时手动替换换行符为\n的操作会导致换行符被转义,反而需要后端再次处理,增加出错概率。使用encodeURIComponent()会将空格编码为%20,换行编码为%0A(或%0D%0A),Flask会自动解码这些编码,完全保留原始文本的格式。
内容的提问来源于stack exchange,提问作者Dany
相关产品推荐
相关产品推荐

