PHP去掉json字符串中的反斜杠\ .

本文介绍如何在使用AJAX将包含转义反斜杠的JSON字符串传递给PHP后,利用PHP的stripslashes函数去除这些反斜杠,以便正确解析JSON数据。

 

 

            http://blog.youkuaiyun.com/lpdx111/article/details/17316059

 

    PHP去掉json字符串中的反斜杠\

           通过AJAX传到PHP的json字符串有时候加上反斜杠”\”来转义,PHP处理时需要先去掉反斜杠,然后再json_decode.

 

           $str = stripslashes($_POST['json']);  

           $arr = json_decode($str,true);  

 

 

 

<think>嗯,用户想了解JSON字符串中为什么会有双重转义的反斜杠。首先,我需要回忆一下JSON的语法规则。记得JSON反斜杠是转义字符,比如要表示一个双引号,就得用\"。那如果字符串里本身有反斜杠,应该怎么处理呢?比如在Java中,字符串里的反斜杠本身也需要转义,所以可能需要两个反斜杠来表示一个实际的反斜杠。但为什么会有双重转义的情况呢?比如用户提到的例子,Java转JSON字符串带斜杠,可能涉及到不同编程语言处理字符串时的转义机制不同。 比如,当Java对象被序列化成JSON字符串时,对象中的某些字符可能需要转义,比如双引号。在Java字符串中,每个反斜杠都要写成两个反斜杠,因为Java本身用反斜杠作为转义字符。所以当生成JSON时,原本的一个反斜杠在Java字符串中会被写成两个,而JSON解析时又会将其转义为一个。这样在最终生成的JSON字符串里,可能就会出现双重转义的情况,导致看起来有很多反斜杠。 另外,用户提供的引用中,例如引用[5]提到Java代码中用了三个反斜杠,这可能是因为在Java字符串中,每个反斜杠需要转义成两个,而JSON本身也需要转义,所以实际需要四个反斜杠才能表示一个?或者可能我记混了。需要仔细理清各个层级的转义过程。 比如,假设有一个JSON字符串需要包含一个反斜杠,那么在JSON中应该写成\\。但是在Java字符串中,每个反斜杠都需要转义,所以Java代码里需要写成"\\\\",这样实际存储的字符串才是\\,符合JSON的要求。如果在这个过程中处理不当,比如多次转义,就会导致双重甚至更多的反斜杠出现。 可能用户遇到的情况是,当从文件或数据库中读取JSON字符串时,原本已经转义过的反斜杠再次被转义,导致显示出来的字符串中有多余的反斜杠。例如引用[2]提到JSON串被序列化后保存在文件中,读取时不能直接解析,因为反斜杠被多转义了一次,需要先去除多余的转义。 总结一下,双重转义反斜杠的原因主要是在不同层级(编程语言字符串JSON语法)中的转义规则叠加导致的。每个层级都需要对特殊字符进行转义,如果没有正确处理,就会产生多重转义的问题。例如,在Java中生成JSON字符串时,需要正确转义反斜杠,否则可能导致最终JSON格式不正确或包含多余的反斜杠。</think>### JSON字符串双重转义反斜杠的原因解释 在JSON字符串中,反斜杠`\`是**转义字符**,用于表示特殊符号(如`\"`表示双引号,`\\`表示单个反斜杠)。当JSON字符串需要在编程语言(如Java、PHP)中处理时,可能因**多层转义规则叠加**导致出现双重反斜杠。以下是具体原因: --- #### 1. **JSON本身的转义规则** - JSON要求特殊字符必须转义,例如: - 双引号需写成`\"` - 反斜杠需写成`\\` - 示例:字符串`"name":"IPhone11\"5G"`在JSON中应表示为: ```json {"name":"IPhone11\"5G"} ``` 实际存储时会变为: ```json {"name":"IPhone11\\"5G"} ``` --- #### 2. **编程语言中的字符串转义** 编程语言(如Java、PHP)的字符串语法也使用反斜杠`\`作为转义符。例如: - **Java**中要表示一个反斜杠,需写成`\\` - 如果JSON字符串在Java中生成,则需对JSON的转义字符再次转义: ```java // JSON要求反斜杠写为\\,而Java中每个\需转义为\\ String json = "{\\\"name\\\":\\\"IPhone11\\\"5G\\\"}"; ``` 实际生成的JSON字符串为: ```json {"name":"IPhone11\"5G"} ``` --- #### 3. **双重转义的典型场景** - **场景1:序列化与反序列化** 若直接将Java字符串序列化为JSON,可能因未正确处理转义导致双重反斜杠。例如引用[5]中的代码: ```java String json = "{\\\"createTime\\\":1668233606000}"; // Java字符串包含三重转义 String replace = json.replace("\\", ""); // 强制去除所有反斜杠 ``` 此时原始字符串实际表示的是`{\"createTime\":1668233606000}`,但未正确处理导致显示异常。 - **场景2:文件存储与读取** JSON字符串写入文件时,若未正确处理转义,读取后可能因转义叠加导致解析失败(如引用[2]所述)。 --- #### 4. **解决方法** - **编程语言工具库**:使用JSON库(如Java的Jackson、PHP的`json_encode()`)自动处理转义,避免手动拼接字符串。 - **替换多余反斜杠**:若已存在双重转义,可通过字符串替换移除多余反斜杠(如引用[4]和[5]的方法)。 - **规范输入格式**:确保原始数据符合JSON标准,避免手动添加转义符。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值