我有一个用例,客户需要通过CSV导入加载JSON序列化的对象。其中一些对象包含包含双引号的字符串。通常,我只需在嵌套的双引号之前添加一个'\‘,以逃避它,但是这似乎与解析CSV文件相冲突。我们使用PHP7.0和函数"fgetcsv“读取文件的行。每当我这样做,我注意到奇怪的行为后,转义双引号是遇到。下面是CSV的一个示例行:
"{""test"": ""\""this\"" is a test""}"下面是PHP如何使用fgetcsv读取此列:
{"test": "\"this\"" is a test""}"我已经确认了任何双引号后,最初的转义双引号遇到了这个问题。考虑到反斜杠可能导致转义问题,我尝试使用另一个反斜杠来逃避反斜杠:
"{""test"": ""\\""this\\"" is a test""}"结果是:
{"test": "\\"this\\" is a test"}因此,虽然这确实解决了问题的任何双引号超过第一个,我留下了两个反斜杠,而不是一个。
在不更改底层代码的情况下,是否有一种方法可以转义这些数据,以便fgetcsv能够对其进行适当的解释?就像这样:
{"test": "\"this\" is a test"}发布于 2018-08-22 20:38:09
您可以尝试使用\"来表示双引号,而不是""。
例如,"{\"test\": \"\\\"this\\\" is a test\"}"
这是否有效可能取决于您正在使用的fgetcsv版本--我不确定。
或者,如果您使用的是fgetcsv 5.3或更高版本,则可以尝试更改fgetcsv参数以更改封闭字符或转义字符,使其不与JSON冲突。请参阅fgetcsv文档中的参数。
外壳 可选的only参数设置字段包围字符(仅一个字符)。逃逸 可选的转义参数设置转义字符(只有一个字符)。 注意:通常在字段中通过加倍将封闭的字符转义;但是,转义字符可以用作替代。因此,对于默认参数值"“和”\“具有相同的含义。除了允许转义外壳字符之外,转义字符没有特殊意义;它甚至不打算转义本身。
(强调原文)
https://stackoverflow.com/questions/51974631
复制相似问题