- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个从 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/
我正在处理一个项目,该项目包括从 mms 网关获取 MMS 并将图像存储在磁盘上。 这包括使用收到的 base64 编码字符串并将其作为 zip 文件存储到 Web 服务器。然后打开此 zip,并检索
我正在开发一个从 API 解析数据的 JavaScript 程序。部分数据以“\t”等格式返回,我需要将其解析为制表符(在此示例中)而不是“\t”。 在 PHP 中,有一个很棒的函数叫做 stripc
只是....不知道为什么两条斜杠函数。 最佳答案 stripcslashes() 跳过特殊字符集,如“\n”和“\r”,保留字符串中可能存在的任何换行符、回车符等。 stripslashes() 简单
我是一名优秀的程序员,十分优秀!