gpt4 book ai didi

javascript - 等同于 PHP 的 stripcslashes

转载 作者:行者123 更新时间:2023-11-29 22:16:33 25 4
gpt4 key购买 nike

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

在 PHP 中,有一个很棒的函数叫做 stripcslashes()它为我做了这个,但我找不到等效的 JavaScript。

有人知道 JavaScript 中有这样的函数吗?或者将 '\t' 解析为制表符的方法?

最佳答案

Javascript 的字符串文字使用相同的反斜杠转义。应该有一种方法可以利用它...

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

请注意,这会使您的代码对注入(inject)攻击敞开大门,并且非常不安全,尤其是当 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

关于javascript - 等同于 PHP 的 stripcslashes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14878719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com