【问题标题】:string having '<br/>' throws unterminated string literal js error具有 '<br/>' 的字符串会引发未终止的字符串文字 js 错误
【发布时间】:2011-06-17 07:54:00
【问题描述】:

我正在从 Db 中获取一些数据,并使用 jquery 按以下方式将其显示在文本区域中。 $('#textareatest').val('&lt;% =teststring %&gt;')。字符串 'teststring' 可能包含 XHTML 换行符(&lt;br/&gt;)。只要字符串包含 &lt;br/&gt;,我就会收到 'unterminated string literal' 错误。我看到很多帖子都在考虑 '\n ' 作为换行符并建议转义它。我尝试类似地转义&lt;br/&gt;,但它没有用。

有人可以帮我解决这个问题吗?

更新::我已经转义了单引号。 这是一个示例字符串 test string&lt;br /&gt;

谢谢。

【问题讨论】:

  • 如果 teststring 包含单引号怎么办?

标签: javascript asp.net xhtml


【解决方案1】:

如果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');

【讨论】:

  • 虽然从数据库获得的数据中没有'\n',但当我尝试在firebug中调试js时,我看到'\n'被添加到
    中。所以我有逃脱它并解决了问题。感谢您的帮助。
  • 谢谢你,你拯救了我的一天!我有一个 PHP 函数,它在 Javascript 块中包含的字符串中输出一个 \n,这就是我继续得到“未终止的字符串文字”的原因!
【解决方案2】:

看一个实际的例子会有很大帮助,但它会是一些愚蠢和烦人的事情。我的猜测是,您在代码中混合了单引号和双引号,最终在构造字符串时会产生不匹配的外部集。

更新

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

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

看,错误信息很清楚——你有一些在语法上以字符串字面量开头的东西,但是解释器找不到结尾。字符串文字实际上只有一种语法,引用:

字符串文字是零个或多个 用双 (") 括起来的字符或 单 (') 引号。一个字符串 必须用引号分隔 同类型;也就是说,要么两者 单引号或双引号 引号。以下是 字符串文字示例:

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

4.5。转义字符

对于未在 前面的表,前面的反斜杠 被忽略,除了一个 引号和反斜杠 角色本身。

你可以在里面插入引号 通过在字符串前面加上 反斜杠。这被称为逃避 引号。例如,

var quote = "他读过\"火葬 山姆麦基的“R.W. Service”。 document.write(quote)

结果是

他读了《山姆·麦吉的火葬》 由 R.W. 服务。包括文字 字符串中的反斜杠,你必须 转义反斜杠字符。为了 例如,分配文件路径 c:\temp 到一个字符串,使用 以下:

var home = "c:\temp"

此时您至少需要做以下两件事之一:

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

  • 在您的代码中加入console.log 语句以缩小发生错误的范围。

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

【讨论】:

  • 请检查我原始问题中的更新以查看示例字符串。
【解决方案3】:

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

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

工作?

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

【讨论】:

  • System.Uri.EscapeUriString 似乎没有编码单引号 (')
【解决方案4】:

您应该对 html 字符串进行编码,所以 &lt;br/&gt; 变为:

&lt;br/&gt;

【讨论】:

  • 因为这不会导致未终止的字符串文字错误。注意我不是他们中的一员......
  • 同意,但单引号已经被转义,并且根据提供的测试字符串,这两种方式都应该这样做......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多