相当于PHP's条纹睫毛

Equivalent of PHP's stripcslashes

本文关键字:PHP 相当于      更新时间:2023-09-26

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

在PHP中,有一个很棒的函数叫做stripcslahes(),它可以帮我做到这一点,但我找不到等效的JavaScript。

有人知道JavaScript中有这样一个函数吗?还是将"''t"解析为选项卡的方法?

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

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

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

它(几乎)和使用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

如果您使用的是jQuery,则html()和text()函数应该可以执行您想要的操作。

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

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