如果我从未知来源创建一个字符串,无论如何都要避免未终止的字符串文字错误

时间:2010-07-20 15:35:39

标签: javascript string

我需要使用用户提供的某些文本在javascript中创建一个字符串。当我尝试运行此行时:

var str = new String('<%= @note.text %>')

我收到未终止的字符串文字错误。鉴于我无法控制输入的内容,并且我无法分配字符串以开始进行任何字符替换,如何解决此问题?谢谢你的阅读。

2 个答案:

答案 0 :(得分:1)

您不能将任意文本放入JS中,并且能够从错误中恢复。

必须在将数据放入文档之前清理数据。我不知道为什么你认为你不能这样做,但你需要删除阻止它的任何障碍。

答案 1 :(得分:1)

您无法在客户端执行任何操作,您需要清理服务器上的字符串。鉴于您通过&lt;%=%&gt;将文字放入String构造函数中,我假设您使用的是各种各样的ASP.Net。

我确信有更优雅的方法可以做到这一点,但这应该是编码字符串以便在JavaScript中使用的第一步。这并没有试图解决将任意字符串传递给JavaScript的相对优点。 (对于大多数情况,很可能会对恶意字符串进行一些服务器端检查。)

假设note是一个文本输入字段,这样的东西可能会起作用....

// New Property in your code behind
public string outputText {get; private set;}

在OnLoad()中,添加

// Encode the string
string tempText = Note.Text
outputText = String.empty;
foreach( char character in tempText)
{
  // Prefix quotation mark with a backslash,
  if(char == "\"")
    outputText += "\\\"";
  // Prefix apostrophe with a backslash,
  else if(char == "'")
    outputText += "\\'";
  // convert newline to a literal.
  else if(char == "\n")
    outputText += "\\n";
  else
    outputText += character;
}

最后,在你的.aspx

var str = new String('<%= outputText %>')