姜戈。查询。用引号转义字符串错误
Posted
技术标签:
【中文标题】姜戈。查询。用引号转义字符串错误【英文标题】:Django. Jquery. escaping string with quotes error 【发布时间】:2014-10-02 11:04:07 【问题描述】:在小型论坛中,任何用户都可以保存帖子。有时这些帖子包含用引号 ( " " ) 包围的单词。当我尝试使用 javascript 处理这些字符串时,这给了我一个错误。
我编写了一些使用 django 变量的 jquery 代码,如下所示:
new_text = "text|safe";
$("#text_p").text(new_text);
如果我将其标记为“安全”,那么 javascript 会给我一个语法错误:
the text "(error here)word between quotes" the user posted
这是合乎逻辑的,因为 javascript 理解这样的引号:
new_text = "this is the text "word between quotes" the user posted"
所以,如果我不将其标记为“安全”并让 django 转义文本,它不会给我一个错误,但文本看起来像这样:
the text "word between quotes" the user posted
我不知道该怎么做,而且我想这可能并不简单,因为如果我使用单引号声明 javascript 变量,当用户发布带有单引号的文本时,我也会遇到同样的问题。如果我使用正则表达式替换双引号而不将文本标记为“text|safe”,那么其他标签将被转义,文本将充满“
我有一个想法可能可行,但很丑陋,可能不是最佳选择:
将文本包含在 <p class = "hidden">
标记中,然后使用 jquery 调用它。
所以,问题是,我该如何解决这个问题?有没有更好的方法? 提前感谢您的帮助。
编辑: 我创建了一个Runnable 来更好地解释它。
【问题讨论】:
我不太理解您的问题...请您制作一个示例小提琴以更好地帮助您(jsfiddle)...干杯:) 无法模拟错误,无论如何我的努力和一些进一步的解释在这里是可行的:fiddle @RobertRozas 我确实模拟了这个runnable中的错误。 【参考方案1】:使用escapejs
过滤器。
示例:
string|escapejs
【讨论】:
这对我很有帮助! 请注意,这不会将 python 布尔值转换为字符串,因此会在 JS 中引发错误(未定义变量 True)【参考方案2】:好的,我找到了部分解决方案,希望它对将来的某人有所帮助。这不是一个优雅的解决方案,因此,如果有人有更好的选择,将受到欢迎。
我在 html 隐藏标签中包含了带有“引用”字词的文本。
python-django:
text_with_quotes = 'this is a text and a word between "quotes"'
html:
<p id = "new_text" class = "hidden"> text_with_quotes|safe</p>
js:
new_text = $("#new_text").text();
$("#text_p").text(new_text);
它有效。但是使用 javascript 和/或 python 可能会有更好的选择。
【讨论】:
相当长一段时间后,但为了那些想使用这个“解决方案”的人。如果您的用户提交下一个文本怎么办:Hi, I'm Bob. <script>alert("This website is vulnerable to XSS!");</script> Nice to meet you.
以上是关于姜戈。查询。用引号转义字符串错误的主要内容,如果未能解决你的问题,请参考以下文章