将文本传递到可能带有单引号的javascript函数

时间:2020-03-06 14:56:05  来源:igfitidea点击:

我有一个动态创建的链接,该链接看起来类似于以下内容:

<a onclick="Edit('value from a text column here')" href="javascript:void(null);">Edit</a>

然后使用Edit函数,然后将传入的值放入Yahoo Rich Text Editor中。除传递的文本中有单引号外,此方法效果很好。显而易见的问题是,链接看起来像这样:

<a onclick="Edit('I'm a jelly donut')" href="javascript:void(null);">Edit</a>

关于我可以做什么的任何建议?我宁愿不要偏离我当前使用的结构,因为它是一个标准的东西(也许这个标准很烂,但这是另一个问题)。

注意:我使用ASP作为服务器端语言。

解决方案

在将引号字符插入HTML之前,请将引号字符转换为它们的HTML等价字符。维基百科上有一长串HTML / XML字符代码。

根据我们动态生成代码的方式,可能有一个函数可以为我们执行此操作:PHP具有htmlspecialchars,尽管我对ASP等不熟悉,但我肯定有类似的例程。

因此,似乎还有更多事情要做,其中大多数可能在大多数情况下都可以工作,但是为了后代的利益,这就是我要做的事情。

被拉到Rich Text Editor中的信息位于YUI数据表中,我正在使用用于该控件的自定义格式器原型创建链接。

使用"用'替换'方法的问题是,我仍然需要以相同的方式查看在数据表中显示的文本。

使用与htmlspecialchars(Server.HTMLEncode)等效的ASP的问题是,它仍然存在从自定义格式器函数生成的javascript中的问题。我不知道为什么会这样,但是我确实尝试过,但没有成功。该答案最接近我想出的答案(并将我推向正确的方向),因此我接受了该答案。

相反,我所做的是使用javascript函数"转义"传递到我的编辑函数中,然后取消转义为Rich Text Editor设置内部HTML。

通过转义功能运行文本,以将\放在'之前。如果要在服务器上生成链接,则我们需要知道我们正在使用哪种服务器端语言来提供更具体的建议。

如果我们在javascript中将客户端标签生成为字符串(请勿这样做,请使用document.createElement),请在参数字符串上使用String.replace方法来选择会破坏我们所用语法的字符生成并用转义版本替换它们。

我们可以将'替换为'

我至少看到了另外三种可能性:

JavaScript Unicode转义

<a onclick="Edit('I\u0027m a jelly donut')" href="javascript:void(null);">Edit</a>

因为\ u0027是引号的javascript espace字符。其他不那么实用:

JavaScript功能

<script>function getQuote() { return "'" }</script>
<a onclick="Edit('I' + getQuote() + 'm a jelly donut')" href="javascript:void(null);">Edit</a>

和:

JavaScript全局变量

<script>var g_strJellyText = "I\u0027m a jelly donut"</script>
<a onclick="Edit(g_strJellyText)" href="javascript:void(null);">Edit</a>

但是我相信我们已经考虑过这些解决方案(或者其变体,或者Chris Johnson提到的HTML实体转义)。

尽管如此,还是值得一提。