姜戈。查询。用引号转义字符串错误

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&quot 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. &lt;script&gt;alert("This website is vulnerable to XSS!");&lt;/script&gt; Nice to meet you.

以上是关于姜戈。查询。用引号转义字符串错误的主要内容,如果未能解决你的问题,请参考以下文章

sql注入逃逸双引号转义

Oracle中的单引号怎么转义

Pyodbc 查询字符串引号转义

如何在使用 jooq 创建查询字符串时转义单引号?

sql 转义单引号 - 修复:错误:105字符串后面的未闭合引号

js单引号和双引号的转义问题