gpt4 book ai didi

ios - 包含正斜杠/和 HTML 的字符串的 NSJSONSerialization 序列化被错误地转义

转载 作者:技术小花猫 更新时间:2023-10-29 11:06:02 28 4
gpt4 key购买 nike

我正在尝试将一些简单的 HTML 转换为 JSON 对象中的字符串值,但我无法让字符串编码不转义 NSJSONSerialization 中的字符串。

示例...我有一个包含一些基本 HTML 文本的字符串:

NSString *str = @"<html><body><p>Samples / Text</p></body></html>";

期望的结果是 JSON 和 HTML 作为值:

{
"Title":"My Title",
"Instructions":"<html><body><p>Samples / Text</p></body></html>"
}

我正在使用标准技术将 NSDictionary 转换为包含 JSON 的 NSString:

NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:str forKey:@"Instructions"];
[dict setObject:@"My Title" forKey:@"Title"];

NSError *err;
NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&err];
NSString *resultingString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@", resultingString);

此方法生成的 JSON 有效,但 HTML 已转义所有正斜杠:

{
"Title":"My Title",
"Instructions":"<html><body><p>Samples \/ Text<\/p><\/body><\/html>"
}

这会在说明 JSON 字符串中创建无效的 HTML。

我想坚持使用 NSJSONSerialization,因为我们在框架的其他任何地方都在使用它,而且在切换到非 Apple 库之前我已经焦头烂额了,因为它们不再受到支持。我尝试过许多不同的字符串编码,但它们都避开了尖括号。

显然\/是 JavaScript 中/字符的有效表示,这就是正斜杠被转义的原因(甚至 StackOverflow 文本编辑器也转义了它)。看: escaping json string with a forward slash?还有JSON: why are forward slashes escaped? .我只是不希望它这样做,而且似乎没有办法阻止 iOS 在序列化时转义字符串值中的正斜杠。

最佳答案

我相信NSJSONSerialization在编码 HTML 方面表现得像设计的那样。

如果您查看一些关于在 JSON 中编码 HTML 的问题(12),您会看到答案总是提到转义正斜杠。

JSON不需要转义正斜杠,但 HTML 不允许 javascript 字符串包含 </因为它可能与 <SCRIPT> 的结尾混淆标签。

查看答案 here , here最直接的是 w3.org HTML4 AppendixB.3.2 Specifying non-HTML data 中说明

ILLEGAL EXAMPLE: 
The following script data incorrectly contains a "</" sequence (as part of "</EM>") before the SCRIPT end tag:

<SCRIPT type="text/javascript">
document.write ("<EM>This won't work</EM>")
</SCRIPT>

尽管此行为可能会给您带来问题 NSJSONSerialisation只是按照古老的编码 HTML 数据规则进行游戏,以便在 <SCRIPT> 中使用标签。

关于ios - 包含正斜杠/和 HTML 的字符串的 NSJSONSerialization 序列化被错误地转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15794547/

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