具有'<br/>'的字符串抛出未终止的字符串文字js错误

时间:2011-01-28 15:32:55

标签: javascript asp.net xhtml

我从Db获取一些数据并使用jquery以下列方式在textarea中显示它。 $('#textareatest').val('<% =teststring %>')。字符串'teststring'可能包含XHTML换行符(<br/>)。每当字符串包含<br/>时,我收到'unterminated string literal'错误。我看到了一些帖子将'\ n'视为换行并建议逃避它。我试图逃避<br/>,但它没有用。

有人可以帮帮我吗?

更新::我已经转发了单引号。 这是一个示例字符串 测试字符串<br />

感谢。

4 个答案:

答案 0 :(得分:2)

如果teststring包含换行符("\n"),它很可能会抛出这种错误,因为JavaScript引擎会将其视为

$("#textareatest").val('Some random text
then an unexpected linebreak');

我建议确保teststring不包含换行符或转义换行符。

如果teststring包含任何单引号,它也可能会终止字符串:

$("#textareatest").val('Some random test's but that single quote kills the string');

答案 1 :(得分:0)

看到一个真实的例子会有很多帮助,但它会变得愚蠢和令人讨厌。我的猜测是你在代码中混合使用单引号和双引号,结果是在构造字符串时以不匹配的外部集合结束。

<强>更新

好吧,如果那是你发送的确切字符串,那就没问题了 - 字符串文字没什么问题,所以你一定是弄错了 - 没有错误。

假设代码在我告诉你之后仍然无法工作,那么你可能需要更深入地了解。

看,错误信息非常清楚 - 你有一些从语法上开始作为字符串文字,但解释器无法找到结束的东西。对于字符串文字,实际上只有一种语法,引用:

  

字符串文字为零或更多   用double(“)或。括起来的字符   单引号(')。一个字符串   必须用引号分隔   相同类型;也就是说,两者都是   单引号或双引号   引号。以下是   字符串文字的例子:

     

“blah”'blah'“1234”“一行\ n   另一行“除了普通   字符,你也可以包括   字符串中的特殊字符,如   显示在最后一个元素中   前面的清单。下表   列出你的特殊字符   可以在JavaScript字符串中使用。   字符含义\ b退格\ f形式   feed \ n新行\ r \ n回车   \ t制表符\反斜杠字符

     

4.5。转义字符

     

对于未在中列出的字符   在前表中,前面的反斜杠   被忽略,但a除外   引号和反斜杠   角色本身。

     

您可以在里面插入引号   字符串前面带有一个   反斜杠。这被称为逃避   引号。例如,

     

var quote =“他读了”火葬   Sam McGee的作品“由R.W. Service提供。”   文件撰写(报价)

     

结果将是

     

他读到“Sam McGee的火葬”   由R.W.服务。包括文字   你必须在字符串中反斜杠   逃避反斜杠的角色。对于   例如,分配文件路径   c:\ temp到一个字符串,使用   以下内容:

     

var home =“c:\ temp”

此时你需要做两件事中的至少一件:

  • 仔细阅读代码,或者更好地与其他人一起浏览代码,寻找错误的单引号或双引号

  • 在您的代码中添加console.log语句,以缩小发生错误的位置。

要记住的最重要的事情是解析器总是正确的 - 即使你认为它是错误的,它仍然是正确的,因为你无法与解析器协商。

答案 2 :(得分:0)

这可能有点矫枉过正,但只是为了测试:

$('#textareatest').val(decodeURI('<% =System.Uri.EscapeUriString(teststring) %>'))

工作?

这将对整个字符串进行编码以便在URL中使用,并让javascript对其进行解码。它效率不高,但相当安全(因为URI中允许的字符集非常小)。

答案 3 :(得分:-1)

您应该对html字符串进行编码,因此<br/>变为:

&lt;br/&gt;