相当于PHP的stripcslashes

时间:2013-02-14 15:51:44

标签: javascript formatting

我正在开发一个从API解析数据的JavaScript程序。部分数据以'\ t'等格式返回,我需要将其解析为tab(在此示例中)而不是'\ t'。

在PHP中,有一个名为stripcslashes()的精彩函数可以为我做这个,但我找不到一个等价的JavaScript。

有没有人知道JavaScript中的这种功能?或者将'\ t'解析为标签的方法?

2 个答案:

答案 0 :(得分:2)

Javascript的字符串文字使用相同的反斜杠转义符。应该有办法利用它......

var escapedString = '\\t' // actually contains "\t"
,   renderedString = (new Function('return "' + text + '"'))()
;
console.log(renderedString); // "   " <= this is the tab character

请注意,这会使您的代码对注入攻击开放,并且非常不安全,尤其是escapedString来自外部来源时!

它(差不多)和using eval一样糟糕!

更新:安全的方式

更好的方法可能是使用正则表达式:

var escapedString = '\\t' // actually contains the characters \ and t
,   renderedString = escapedString.replace(/\\(.)/g, function (match, char) {
        return {'t': '\t', 'r': '\r', 'n': '\n', '0': '\0'}[char] || match;
    }
;
console.log(renderedString); // "   " <= this is the tab character

在这里,您将使用replace方法跟踪给定字符串中的所有反斜杠(后跟任何字符),并在每次找到匹配项时调用匿名函数。函数的返回值将决定匹配的匹配项。

匿名函数包含一个JS对象(在本例中用作关联数组),其中包含所有已识别的转义字符。反斜杠后面的字符(此处称为char)将在该关联数组中查找,JS将返回相应的值。

该行的最后一部分|| char确保如果char不是关联数组的一部分,则使用未更改的匹配(包括反斜杠),保持原始字符串不变

当然,这确实意味着您必须提前指定所有可能的转义。

第二次更新:要走的路

我刚想到第一种方法不安全(可能存在欺诈性输入),第二种方法不确定(你真的不知道你需要提供什么逃逸);也许两种方法都可以合并!

var escapedString = '\\t' // actually contains the characters \ and t
,   renderedString = escapedString.replace(/\\./g, function (match) {
        return (new Function('return "' + match + '"'))() || match;
    }
;
console.log(renderedString); // "   " <= this is the tab character

当然,这个解决方案的性能不会很好。解析和构建新函数是一项代价高昂的工作,并且需要对转义字符串中存在的每个匹配反斜杠执行此操作。如果性能成为一个问题,您可以添加某种缓存机制,它会在每个函数创建后记住它们。

然后,您还可以查找您需要使用的API,尝试找到它的文档或联系其制造商,并获得它可以产生的逃逸的明确列表。 :-0

答案 1 :(得分:0)

如果你使用jQuery,html()和text()函数应该做你想要的。

var parsed = $("<div/>").html('\thello').text();

http://api.jquery.com/html/
http://api.jquery.com/text/