首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确地转义位于CSV列中JSON对象中嵌套的字符串中的双引号?

如何正确地转义位于CSV列中JSON对象中嵌套的字符串中的双引号?
EN

Stack Overflow用户
提问于 2018-08-22 20:28:25
回答 1查看 1.6K关注 0票数 2

我有一个用例,客户需要通过CSV导入加载JSON序列化的对象。其中一些对象包含包含双引号的字符串。通常,我只需在嵌套的双引号之前添加一个'\‘,以逃避它,但是这似乎与解析CSV文件相冲突。我们使用PHP7.0和函数"fgetcsv“读取文件的行。每当我这样做,我注意到奇怪的行为后,转义双引号是遇到。下面是CSV的一个示例行:

代码语言:javascript
复制
"{""test"": ""\""this\"" is a test""}"

下面是PHP如何使用fgetcsv读取此列:

代码语言:javascript
复制
{"test": "\"this\"" is a test""}"

我已经确认了任何双引号后,最初的转义双引号遇到了这个问题。考虑到反斜杠可能导致转义问题,我尝试使用另一个反斜杠来逃避反斜杠:

代码语言:javascript
复制
"{""test"": ""\\""this\\"" is a test""}"

结果是:

代码语言:javascript
复制
{"test": "\\"this\\" is a test"}

因此,虽然这确实解决了问题的任何双引号超过第一个,我留下了两个反斜杠,而不是一个。

在不更改底层代码的情况下,是否有一种方法可以转义这些数据,以便fgetcsv能够对其进行适当的解释?就像这样:

代码语言:javascript
复制
{"test": "\"this\" is a test"}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-22 20:38:09

您可以尝试使用\"来表示双引号,而不是""

例如,"{\"test\": \"\\\"this\\\" is a test\"}"

这是否有效可能取决于您正在使用的fgetcsv版本--我不确定。

或者,如果您使用的是fgetcsv 5.3或更高版本,则可以尝试更改fgetcsv参数以更改封闭字符或转义字符,使其不与JSON冲突。请参阅fgetcsv文档中的参数。

外壳 可选的only参数设置字段包围字符(仅一个字符)。逃逸 可选的转义参数设置转义字符(只有一个字符)。 注意:通常在字段中通过加倍将封闭的字符转义;但是,转义字符可以用作替代。因此,对于默认参数值"“和”\“具有相同的含义。除了允许转义外壳字符之外,转义字符没有特殊意义;它甚至不打算转义本身。

(强调原文)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51974631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档