我知道,有很多关于"未终止的字符串文字"已经回答了很多问题。 Javascript中的错误,但我无法找到我正在使用的某个字符串的错误。它是一个单行字符串(因此不需要特殊的行结尾),所有内容似乎都被正确转义。
我的应用程序允许学生提交计算机科学各种练习的解决方案,这里的特定练习是用当前的注册内容来评论汇编程序代码。因此,提交的解决方案包含许多特殊字符。
可以使用AJAX将解决方案加载到应用程序的页面中,基本上只是jQuery('#elem').html()
调用,并使用Rails'来转义其文本。 escape_javascript
帮助者。
这适用于所有其他解决方案,而不是这个。我通过JS验证器(http://esprima.org/demo/validate.html)运行它,它给我直接运行时得到的相同错误,但我仍然不知道字符串的哪个部分导致它。
原始文本(包含所有控制序列,因此在一行中)是:
// Kommentierte Register mit Berechnungen, unten mit gegebenen Variaben.\r\n\r\nint dummy(int y, int* z)\r\n {\r\n asm (\r\n01 \"movl 0x8(%ebp), %ecx\\n“ \t\r\n\t\t\t\t//%eax=? ; %ecx=y ; %edx=?\r\n02 \"movl 0xc(%ebp), %eax\\n\" \t\r\n\t\t\t\t//%eax=z ; %ecx=y ; %edx=?\r\n03 \"movl (%eax), %edx\\n\"\t\t\r\n\t\t\t\t//%eax=z ; %ecx=y ; %edx=z\r\n04 \"xorl %eax, %eax\\n“ \t\t\r\n\t\t\t\t//%eax=0 ; %ecx=y ; %edx=z\r\n05 \"addl %edx, %eax\\n\"\t\t\r\n\t\t\t\t//%eax=z ; %ecx=y ; %edx=z\r\n06 \"imull %ecx, %eax\\n\"\t\t\r\n\t\t\t\t//%eax=y*z ; %ecx=y ; %edx=z\r\n07 \"andl %eax, %edx\\n\"\t\t\r\n\t\t\t\t//%eax=y*z ; %ecx=y ; %edx=(y*z)&z\r\n08 \"leal (, %eax, 4), %eax\\n\"\t\r\n\t\t\t\t//%eax=4(y*z) ; %ecx=y ; %edx=(y*z)&z\r\n09 \"notl %eax\\n\"\t\t\t\r\n\t\t\t\t//%eax=~4(y*z) ; %ecx=y ; %edx=(y*z)&z\r\n10 \"andl $15, %eax\\n\"\t\t\t\r\n\t\t\t\t//%eax=~4(y*z)&15 ; %ecx=y ; %edx=(y*z)&z\r\n11 \"imull %eax, %edx\\n\"\t\t\r\n\t\t\t\t//%eax=~4(y*z)&15 ; %ecx=y ; %edx=((y*z)&z) * (~4(y*z)&15)\r\n12 \"movl 0xc(%ebp), %eax\\n\" \t\r\n\t\t\t\t//%eax=z ; %ecx=y ; %edx=((y*z)&z) * (~4(y*z)&15)\r\n13 \"movl %edx,(%eax)\\n\"\t\t\r\n\t\t\t\t//%eax=*((y*z)&z) * (~4(y*z)&15) ; %ecx=y ; %edx=((y*z)&z) * (~4(y*z)&15)\r\n14 \"xorl %eax, %eax\\n\"\t\t\r\n\t\t\t\t//%eax=0 ; %ecx=y ; %edx=((y*z)&z) * (~4(y*z)&15)\r\n\r\n );\r\n }\r\n \r\n int main()\r\n {\r\n int a = 10;\r\n int temp = dummy(2, &a);\r\n printf(\"Rueckgabe von dummy(2, &a) fuer a == 10: %d (Inhalt von eax)\\n\",\r\n temp);\r\n printf(\"Neuer Wert von a: %d\\n\", a);\r\n return 0;\r\n } \r\n\r\n\r\n//Mit Variablen:\r\n\r\n\r\n//y=2, *z= *a (=10)\r\n\r\nint dummy(int y, int* z)\r\n {\r\n asm (\r\n01 \"movl 0x8(%ebp), %ecx\\n“\t\t\t//%eax=? ; %ecx=2 ; %edx=?\r\n02 \"movl 0xc(%ebp), %eax\\n\" \t\t//%eax=0xA ; %ecx=2 ; %edx=?\r\n03 \"movl (%eax), %edx\\n\"\t\t\t//%eax=0xA ; %ecx=2 ; %edx=10\r\n04 \"xorl %eax, %eax\\n“ \t\t\t\t//%eax=0 ; %ecx=2 ; %edx=10\r\n05 \"addl %edx, %eax\\n\"\t\t\t\t//%eax=10 ; %ecx=2 ; %edx=10\r\n06 \"imull %ecx, %eax\\n\"\t\t\t\t//%eax=20 ; %ecx=2 ; %edx=10\r\n07 \"andl %eax, %edx\\n\"\t\t\t\t//%eax=20 ; %ecx=2 ; %edx=0\r\n08 \"leal (, %eax, 4), %eax\\n\"\t\t//%eax=80 ; %ecx=2 ; %edx=0\r\n09 \"notl %eax\\n\"\t\t\t\t\t//%eax=47 ; %ecx=2 ; %edx=0\r\n10 \"andl $15, %eax\\n\"\t\t\t\t//%eax=15 ; %ecx=2 ; %edx=0\r\n11 \"imull %eax, %edx\\n\"\t\t\t\t//%eax=15 ; %ecx=2 ; %edx=0\r\n12 \"movl 0xc(%ebp), %eax\\n\" \t\t//%eax=0xA ; %ecx=2 ; %edx=0\r\n13 \"movl %edx,(%eax)\\n\"\t\t\t\t//%eax=0xA ; %ecx=2 ; %edx=0\r\n\t\t\t\t\t\t\t\t\t\t\t(speicher Wert von %edx in Register 0xA)\r\n14 \"xorl %eax, %eax\\n\"\t\t\t\t//%eax=0 ; %ecx=2 ; %edx=0\r\n\r\n );\r\n }
可以在此JSFiddle中找到生成和转义的JavaScript代码。它在浏览器的javascript控制台中抛出相同的错误。
字符串中有一些引号似乎没有被转义,但是它们是不同的ASCII字符(例如0x8(%ebp), %ecx\n“
,并且应该不是问题。
我到目前为止所尝试的是从字符串中删除某些元素(即正斜杠,百分比符号,特殊引号甚至是正常的引号),然后逃避它,但到目前为止没有任何帮助。
我只是失明并且遗漏了一些明显的东西,或者是否存在导致此错误的秘密javascript控制序列?
提前致谢!
修改:
当我从firebug(CTRL-C - > CTRL-V)复制响应体时,将其发布到其控制台并直接运行,它完全正常。
然而,当我右键单击请求并选择"复制响应主体"时,我无法在不收到错误的情况下运行它。
我通过差异运行它并得到以下结果:http://www.diffchecker.com/8y3eu2l5
似乎没有明显的区别,那么哪个角色会导致它?
编辑2:
万一有人偶然发现同样的问题:Rails中的escape_javascript
方法似乎并没有自动转义这些字符(至少在我使用的Rails版本中没有)。
使用解决方案指出here现在一切都很完美。
答案 0 :(得分:1)
你在文本\n\n\n//Mit Variablen
之前有一个奇怪的角色导致错误。我不确定它是什么字符,但它会导致插入失败。
编辑:它是一个unicode行分隔字符(代码2028),如here所述。因为它不会在大多数输出上打印,所以您无法发现它。在JSFiddle,它是可见的,它被标记为红点。